我正在尝试使用 JPA 通过本机查询进行插入,但我不想创建事务:
Query query = em.createNativeQuery("INSERT INTO person (id, firstname, lastname) VALUES ('1','Ronnie','Dio')");
int count = query.executeUpdate();
Run Code Online (Sandbox Code Playgroud)
这最终会出现 TransactionRequiredException:
javax.persistence.TransactionRequiredException: Executing an update/delete query
at org.hibernate.ejb.AbstractQueryImpl.executeUpdate(AbstractQueryImpl.java:99)
Run Code Online (Sandbox Code Playgroud)
但是,如果我打开 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();
Run Code Online (Sandbox Code Playgroud)
所以我的问题是 - 我在第一个示例中做错了什么?在 JPA 中执行插入/更新/删除查询真的需要事务吗?如果是,是否有任何明确指定的文档链接?如果不是——我做错了什么?