我在BookShelf和Book之間有一對多的關係。書籍表中的ISBN編號是一個獨特的字段。現在當我嘗試插入書架(具有相同的isbn數字)的書架時,我得到一個約束衝突異常,並且書籍表中的記錄未插入。我的問題是,貨架記錄仍然被插入。不休眠在事務或批次中插入一個貨架記錄及其相應的書記錄。我想要的是,如果書籍表中的插入由於重複條目而失敗,則不會插入貨架表中的記錄。請告訴我如何實現這一目標。兒童插入在一對多的hibernate映射中失敗(因爲兒童中有一個唯一的鍵),但父母仍然持續
0
A
回答
0
閱讀第Transaction and concurrency of Hibernate official documentation和應用程序性交易管理原則,你發現有(13.2.1):
Session sess = factory.openSession();
Transaction tx = null;
try {
tx = sess.beginTransaction();
//do your database work
tx.commit();
}
catch (RuntimeException e) {
if (tx != null) tx.rollback();
throw e; // or display error message
}
finally {
sess.close();
}
否則,尋找容器管理的事務將要處理的事務和會話管理你。
0
,如果你不使用JTA事務處理的類型應該是RESOURCE_LOCAL
<persistence-unit name="PU" transaction-type="RESOURCE_LOCAL">
<non-jta-data-source>java:/comp/env/jdbc/DS</non-jta-data-source>
檢查該樣本檢查您的persistence.xml
EntityManagerFactory emf = Persistence
.createEntityManagerFactory("PU");
EntityManager em = emf.createEntityManager();
try {
em.setFlushMode(FlushModeType.COMMIT);
em.getTransaction().begin();
BookShelf bs = new BookShelf();
bs.setName("Adventure");
Book b1 = new Book();
b1.setTitle("Spider Man");
bs.addBook(b1);
Book b2 = new Book();
b2.setTitle("Spider Man"); //Duplicate
bs.addBook(b2);
em.persist(bs);
try {
em.getTransaction().commit();
} catch (Throwable t) {
t.printStackTrace();
em.getTransaction().rollback();
}
} catch (Throwable t2) {
t2.printStackTrace();
} finally {
em.close();
emf.close();
}
BookShelf.java
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "bookShelf")
private List<Book> bookList;
public void addBook(Book book) {
if (bookList == null) {
bookList = new java.util.ArrayList<Book>();
}
book.setBookShelf(this);
bookList.add(book);
}
相關問題
- 1. 休眠,一對多,未插入父母的兒童
- 2. removeView()對兒童的父母
- 3. MVC兒童 - 父母在同一頁
- 4. Hibernate的一個一對多的HashMap不更新對兒童
- 5. 的ActiveRecord仍然保存父對象,如果對兒童的驗證失敗
- 6. nhibernate 3.3一對多映射的代碼更新兒童,而不是插入
- 7. FluentNHibernate許多一對多的兒童
- 8. Flexboxs兒童溢出父母
- 9. 父母兒童微調器
- 10. XPath來選擇特定的兒童與兒童父母
- 11. 父母對兒童主題 - WordPress的
- 12. 多表繼承;對兒童的唯一標題只有
- 13. 兒童可以在谷歌扳手中有多個父母嗎?
- 14. JTree的兒童增加兒童對兒童等
- 15. Java Android - 將父母鑄造成兒童與兒童
- 16. Breeze.js實體框架多個一對一的相同類型(父 - >兒童childOne,兒童childTwo)
- 17. 休眠單向一個一對多:堅持從兒童
- 18. JPA一個一對多堅持兒童及其ID
- 19. 插入父 - 兒童在Castle ActiveRecord
- 20. 如何將一個表中的兒童保存在Hibernate中
- 21. 在sitecore中獲取兒童兒童
- 22. 角指令兒童沒有父母transclude
- 23. 失蹤兒童
- 24. 如何建立一個功能uasort將兒童在父母
- 25. 解決許多一對一,之前父表問題兒童
- 26. settattr對父類兒童
- 27. Angular 2 - 在父母路由器插座中的兒童組件
- 28. Wordpress-我刪除父類別,但兒童catageory仍然
- 29. 父母的措施給兒童大小
- 30. 兒童和父母之間的z-index
Hibernate做你告訴它做的事情。將事務包含在事務中並在出現問題時進行回滾。 – skuntsel 2013-02-25 12:24:48