我在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. removeView()对儿童的父母
- 2. MVC儿童 - 父母在同一页
- 3. 父母模型中儿童的显示列表一对多
- 4. Hibernate的一个一对多的HashMap不更新对儿童
- 5. 的ActiveRecord仍然保存父对象,如果对儿童的验证失败
- 6. Flexboxs儿童溢出父母
- 7. FluentNHibernate许多一对多的儿童
- 8. XPath来选择特定的儿童与儿童父母
- 9. 父母对儿童主题 - WordPress的
- 10. 儿童可以在谷歌扳手中有多个父母吗?
- 11. Java Android - 将父母铸造成儿童与儿童
- 12. JPA一个一对多坚持儿童及其ID
- 13. 插入父 - 儿童在Castle ActiveRecord
- 14. Angular 2 - 在父母路由器插座中的儿童组件
- 15. 检查儿童和父母的collision2D
- 16. 父母的措施给儿童大小
- 17. 儿童和父母之间的z-index
- 18. 解析儿童Simplexml儿童
- 19. 儿童内部角儿童
- 20. 如何获得插入儿童的父母ID的ID
- 21. 儿童类没有父
- 22. 在Symfony中为儿童一对多过滤器添加排序
- 23. NHibernate不插入儿童
- 24. 如何检查儿童中的数据,在Firebase中的儿童
- 25. 获得一级儿童?
- 26. 订阅儿童路线变化,知道父母在选择儿童路线段?
- 27. 计算儿童儿童的轨迹
- 28. 父母致电儿童功能
- 29. JavaScript - 儿童继承打破父母
- 30. 访问父母从儿童模型
Hibernate做你告诉它做的事情。将事务包含在事务中并在出现问题时进行回滚。 – skuntsel 2013-02-25 12:24:48