【发布时间】:2018-12-01 00:45:37
【问题描述】:
我正在尝试使用 JPA 通过本机查询进行插入,但我不想创建事务:
Query query = em.createNativeQuery("INSERT INTO person (id, firstname, lastname) VALUES ('1','Ronnie','Dio')");
int count = query.executeUpdate();
这以 TransactionRequiredException 结束:
javax.persistence.TransactionRequiredException: Executing an update/delete query
at org.hibernate.ejb.AbstractQueryImpl.executeUpdate(AbstractQueryImpl.java:99)
但是,如果我打开 Hibernate 会话并执行相同的查询 - 它可以工作:
Session session = em.unwrap(Session.class);
Query query = session.createSQLQuery("INSERT INTO person (id, firstname, lastname) VALUES ('1','Ronnie','Dio')");
int count = query.executeUpdate();
所以我的问题是 - 我在第一个示例中做错了什么?在 JPA 中执行插入/更新/删除查询真的需要事务吗? 如果是,是否有任何指向明确指定它的文档的链接?如果不是 - 我做错了什么?
【问题讨论】:
-
您无法避免创建事务。您只能使其隐含(例如通过会话)
标签: java hibernate jpa transactions