我有一个用户,他有很多书:
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
我试图证明二进制搜索的复杂性.维基百科说,最糟糕的情况是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) 我有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)