在多線程環境,休眠,多線程和CascadeType.ALL
這工作
Box box = new Box("B");
Toy t1 = box.addNewToy("t1");
Toy t2 = box.addNewToy("t2");
synchronized (em) {
em.getTransaction().begin();
em.persist(t1);
em.getTransaction().commit();
}
synchronized (em) {
em.getTransaction().begin();
em.persist(t2);
em.getTransaction().commit();
}
但這並不
Box box = new Box("B");
Toy t1 = box.addNewToy("t1");
synchronized (em) {
em.getTransaction().begin();
em.persist(t1);
em.getTransaction().commit();
}
Toy t2 = box.addNewToy("t2");
synchronized (em) {
em.getTransaction().begin();
em.persist(t2);
em.getTransaction().commit();
}
我得到這樣的錯誤:「對象引用未保存的瞬態實例「,」具有相同標識符值的不同對象已經是與會議相關「
任何想法?
下面是一個最小的Maven項目能重現問題:http://www.2shared.com/file/bGLmJ6aO/example.html
詳細
Java版本 「1.7.0_17」,休眠4.2.3.Final,Ubuntu的11.04整潔的,SQLite的
class Toy {
@ManyToMany(mappedBy="toys",fetch = FetchType.LAZY, cascade = CascadeType.ALL)
public List<Box> getBoxes() { return boxes; }
public void setBoxes(List<Box> boxes) { this.boxes = boxes; }
}
class Box {
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
public List<Toy> getToys() { return toys; }
public void setToys(List<Toy> toys) { this.toys = toys; }
public Toy addNewToy(String name) {
Toy toy = new Toy();
toy.setName(name);
toy.boxes.add(this);
toys.add(toy);
return toy;
}
}
第一個代碼塊中是否有拼寫錯誤?沒有t2。 – takteek