Persist 始终生成插入查询
Persist always generates an insert query
首先,我正在使用 EclipseLink 2.5.2、ojdbc6、spring-orm 4.1.1 和 QueryDSL 3.7.1。
我不明白为什么我的对象不在我的持久性上下文中(或者它应该如何?)。
我正在使用 QueryDSL 来查询我的对象,但是当我尝试使用 entitymanager.persist()
来保留这样的对象时,它总是会创建一个插入语句,从而导致重复的主键异常。
在对象上调用 refresh()
时崩溃 java.lang.IllegalArgumentException: Can not refresh not managed object
。使用 merge()
效果很好,但这不是我想要的。我需要保留对已保存对象的原始引用。
persistence.xml
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="XXXXXX"
transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/XXXXX</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="eclipselink.weaving" value="static" />
<property name="eclipselink.target-database" value="Oracle11" />
</properties>
</persistence-unit>
</persistence>
用于创建 JPAQuery 的实体管理器和 refresh/merge/persist 相同。
如果您需要更多 information/configurations/etc。请发表评论。我真的被困住了,想不通可能是什么原因,还有哪些其他信息可能对你们有用。
首先,我正在使用 EclipseLink 2.5.2、ojdbc6、spring-orm 4.1.1 和 QueryDSL 3.7.1。
我不明白为什么我的对象不在我的持久性上下文中(或者它应该如何?)。
我正在使用 QueryDSL 来查询我的对象,但是当我尝试使用 entitymanager.persist()
来保留这样的对象时,它总是会创建一个插入语句,从而导致重复的主键异常。
在对象上调用 refresh()
时崩溃 java.lang.IllegalArgumentException: Can not refresh not managed object
。使用 merge()
效果很好,但这不是我想要的。我需要保留对已保存对象的原始引用。
persistence.xml
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="XXXXXX"
transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/XXXXX</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="eclipselink.weaving" value="static" />
<property name="eclipselink.target-database" value="Oracle11" />
</properties>
</persistence-unit>
</persistence>
用于创建 JPAQuery 的实体管理器和 refresh/merge/persist 相同。
如果您需要更多 information/configurations/etc。请发表评论。我真的被困住了,想不通可能是什么原因,还有哪些其他信息可能对你们有用。