小编chr*_*ris的帖子

连接表的唯一约束

我有一个用户,他有很多书:

public class User {

    @OneToMany
    @Cascade( { org.hibernate.annotations.CascadeType.ALL })
    @JoinTable(name="user_book")
    private Set<Book> books;

}
Run Code Online (Sandbox Code Playgroud)

这将在数​​据库中创建一个连接表:

|user_id|book_id|
-----------------
|1      |2      |
|1      |3      |
|2      |1      |  
Run Code Online (Sandbox Code Playgroud)

问题是唯一约束book_id列上.这意味着2个用户不能拥有相同的书.如果我想添加到user(id:1)a book(id:1),那么我得到:BatchUpdateException: Duplicate entry

这是正常的吗?或者这是错误?如果不是一个错误,我如何配置hibernate来创建唯一约束对(user_id,book_id)不仅book_id在连接表中.

休眠: 3.6.4.Final

MySQL的: 5.0.21

hibernate jpa

8
推荐指数
1
解决办法
4516
查看次数

试图证明二进制搜索的复杂性是O(log(n))

我试图证明二进制搜索的复杂性.维基百科说,最糟糕的情况是log(n).这意味着:

如果我有16个元素的数组,log(16)是4.我应该有最多4次调用来查找数组中的元素.

我的java代码:

class Main{
      int search(int[] array, int number, int start, int end) {
            System.out.println("Method call");
            int half = (end - start) / 2;

            if (array[start + half] == number) {
                return array[start + half];
            }
            if (array[start + half] < number) {
                return search(array, number, start + half, end);
            } else {
                return search(array, number, start, end - half);
            }
        }

        public static void main(String[] args) {
            int[] array = new int[] { 1, 2, 3, 4, 5, …
Run Code Online (Sandbox Code Playgroud)

java algorithm complexity-theory big-o binary-search

3
推荐指数
1
解决办法
3061
查看次数

将消息放入队列的第一条路由和第二条读取消息的路由

我有Camel和JMS的问题.

我的路线非常简单:

  @Override
    protected RouteBuilder[] createRouteBuilders() throws Exception {
        createJmsComponent();

        RouteBuilder route1 = new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                from("direct:startpoint")
                .log("TO JMS: ${body}")
                .to("jms://queue:QUEUE.NAME.OUT?replyTo=QUEUE.NAME.IN&replyToType=Exclusive")
                ;
            }
        };

        RouteBuilder route2 = new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                from("jms://queue:QUEUE.NAME.IN?receiveTimeout=10000")
                .log("FROM JMS: ${body}")
                ;
            }
        };
        return new RouteBuilder[]{route1, route2};
    }
Run Code Online (Sandbox Code Playgroud)

在日志中,我有我需要的东西:

2012-07-04 16:28:10,443 INFO  route1 - TO JMS: message
2012-07-04 16:28:13,477 INFO  route2 - FROM JMS: message
Run Code Online (Sandbox Code Playgroud)

但问题是我有异常:

2012-07-04 16:28:33,960 ERROR o.a.c.p.DefaultErrorHandler                        - Failed …
Run Code Online (Sandbox Code Playgroud)

jms apache-camel

2
推荐指数
1
解决办法
4544
查看次数