我試圖做一個插入選擇與Jpa。 上,我嘗試做實體是這樣的:插入選擇與jpa錯誤
@Entity
public class A {
private String fieldOne;
private String fieldTwo;
private String fieldThree;
private B fieldFour;
@Id
public String getFieldOne(){...}
@Id
public String getFieldTwo(){...}
@Id
@OneToOne
public B getFieldThree(){...}
public String getFieldFour(){...}
....
@Entity
public class B {
private CompositeId id;
....
@EmbeddedId
public CompositeId getId(){
return MyUUIDGenerator.generateCompositeId();
}
....
我試圖插入圖是非常簡單的:
insert into A (fieldOne, fieldTwo, fieldThree, fieldFour)
select 'staticValueOne', 'staticValueTwo', B.id, 'staticValueFour' from B
where ....
的「staticValueX」是由應用程序計算出的值是對於一組給定的B元素,我需要全部相等。
在執行過程中的應用程序返回異常:
java.lang.IllegalArgumentException異常:org.hibernate.QueryException:散裝的一部分,與任何一個序列或 插入柱式發電機可以插入只 IDS產生[插入...
我不明白爲什麼,因爲我沒有在A中產生任何值,我給插入它所需要的所有值。 有沒有人有建議瞭解這種行爲?
謝謝!
編輯:一點點更新...
我改變了A級只有標記爲@Id字符串類型的字段,但是Hibernate會錯誤建設正確的查詢:表別名協會與字段名稱錯過一些領域。
jpa不支持在jpa中插入語句,只能選擇,更新和刪除。堅持你需要使用entitymanager和對象樣式的數據。 – 2014-10-17 13:35:14
你是否執行該插入作爲本機查詢?因爲IMO以一種並不真正需要的方式混合使用JPA和SQL,這使事情變得複雜。此外,您應該只應用@Id [某些類型的字段](http://docs.oracle.com/javaee/6/api/javax/persistence/Id.html) – fvu 2014-10-17 13:35:51
我正在使用Jpql,沒有本機查詢。由於性能問題,我被迫使用這種類型的插入。我也試過去掉所有的Id,在Embedded中插入相同的B.id值,並且嵌入工作完美。但我無法使用此解決方法。 – 2014-10-17 13:40:42