2016-08-18 26 views
1
@Entity 
@Table(name="PROPERTY_VALUES") 
public class PropertyValuesData extends AbstractData { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name="VAL_ID") 
    private Long id; 

    @OneToOne(fetch = FetchType.EAGER, cascade= {CascadeType.PERSIST}) 
    @JoinColumn(name = "VAL_PROP_ID") 
    private PropertyData property; 

} 

堅持對象:JPA插入對象,如果不存在,什麼都不做,如果存在

我有兩個情況: 1)創建新的對象PropertyValuesData,其中包含現有的財產(以ID) - >然後我只想添加新的PropertyValuesData 2)我創建新的對象PropertyValuesData,新屬性 - >然後我想要插入新的PropertyData

如果我添加CascadeType.PERSIST,那麼我可以保存新的屬性,但對於現有的屬性,它嘗試再次插入它。我應該怎麼做以避免再次插入相同的屬性?

+0

請添加的代碼幾行展示瞭如何你正在將實體寫入數據庫/ entityManager – Guenther

回答

0

嘗試增加額外CascadeType.MERGE

此外,請記住PropertyData需求是Managed(所以在當前的持久性上下文,並且不沾邊),以便爲它工作。如果您使用Detached實體,則將其設置爲id以從db中獲取某些內容,則會導致INSERT而不是UPDATE

爲了得到它從DB(甚至id的工作100%,只要SELECT需要PropertyData就像你正在努力,將它設置,然後堅持PropertyValuesData

+0

我嘗試使用MERGE,但它沒有幫助.. – lucas999

+0

@ lucas999檢查提醒。您正在使用分離的實體。 – Antoniossss