首先,我使用EclipseLink 2.5.2,ojdbc6,spring-orm 4.1.1和QueryDSL 3.7.1。堅持始終生成插入查詢
我不明白爲什麼我的對象不在我的持久性上下文中(或者這是怎麼回事?)。 我使用QueryDSL查詢我的對象,但是當我嘗試使用entitymanager.persist()
持久保存這樣的對象時,它總是會創建一個插入語句,導致重複的primarykey異常。 調用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和刷新/合併/持續EntityManager的是相同的。
如果您需要更多信息/配置/等。請留下評論。我真的陷入困境,無法理清可能的原因以及其他信息可能對你們有用。
你想堅持,包括ID的對象?即時猜測是pk –
不要描述你的代碼。發表它。沒有理由對從查詢中獲得的對象調用persist()。 persist被用來插入新的實體。如果你從查詢中得到它們,那麼它們並不是新的。 –
不能幫助刪除完整的類,但我會猜測問題是你試圖堅持一個已經存在於數據庫中的對象,這就是爲什麼你會得到主鍵異常,當然合併方法會起作用,因爲它像更新方法... –