日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java primary,java – 键’PRIMARY’的重复条目’string1-string2′

發(fā)布時(shí)間:2024/10/8 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java primary,java – 键’PRIMARY’的重复条目’string1-string2′ 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在使用hibernate和jpa通過(guò)MySQL數(shù)據(jù)庫(kù)的Spring MVC應(yīng)用程序中,每當(dāng)我嘗試保存包含子實(shí)體的父實(shí)體時(shí),我都會(huì)收到有關(guān)子實(shí)體的以下錯(cuò)誤消息:

Duplicate entry 'string1-string2' for key 'PRIMARY'

這里,string1和string2指的是子實(shí)體的復(fù)合主鍵的兩個(gè)部分.我該如何解決這個(gè)錯(cuò)誤?

以下是在父地址實(shí)體中定義實(shí)體之間關(guān)系的方式:

@ManyToOne(cascade = { CascadeType.ALL }, fetch=FetchType.EAGER)

@JoinColumns({ @JoinColumn(name = "usecode", referencedColumnName = "code", insertable = false, updatable = false),

@JoinColumn(name = "usecodesystem", referencedColumnName = "codesystem", insertable = false, updatable = false)

})

public HL7GeneralCode use;

以下是在子GeneralCode實(shí)體中定義關(guān)系的方式:

@OneToMany(mappedBy = "use", cascade = {CascadeType.ALL})

private Set addresses;

可以讀取GeneralCode實(shí)體的完整代碼at this link.

可以在at this link找到復(fù)合主鍵類的代碼.

并且可以在at this link找到由Address擴(kuò)展的BaseEntity類.

我已經(jīng)閱讀了很多關(guān)于此錯(cuò)誤消息的帖子.其他帖子的答案不能解決我的錯(cuò)誤消息,并且它們通常不解決我的實(shí)體使用復(fù)合主鍵的事實(shí).

編輯:

持久化地址的代碼是:

@Override

public void savehl7Address(HL7Address addr) {

if ((Integer)addr.getId() == null) {

System.out.println("[[[[[[[[[[[[ about to persist address ]]]]]]]]]]]]]]]]]]]]");

this.em.persist(addr);}

else {

System.out.println("]]]]]]]]]]]]]]]]]] about to merge address [[[[[[[[[[[[[[[[[[[[[");

this.em.merge(addr);}

}

第二次編輯:

我試著按照@ Ben75的建議,但是代碼在this.em.persist(addr.getUse());行崩潰了.請(qǐng)注意,他的if子句不適合我的實(shí)際對(duì)象模型,因此我將下面的if子句更改為if(addr.getUse()!= null&& addr.getId()== null).這是我的代碼.

@Override

public void savehl7Address(HL7Address addr) {

if(addr.getUse() != null && addr.getId()==null){

//this next line prints in the stack trace right before the app crashes

System.out.println("about to this.em.persist(addr.getUse());");

//HL7GeneralCode is not persistent yet

this.em.persist(addr.getUse());

//since there is a cascade ALL on the adresses relationship addr is now persistent

return;

}

System.out.println("=========================== inside jpahl7patientrespository.savehl7Address(addr)");

if ((Integer)addr.getId() == null) {

System.out.println("[[[[[[[[[[[[ about to persist address ]]]]]]]]]]]]]]]]]]]]");

this.em.persist(addr);}

else {

System.out.println("]]]]]]]]]]]]]]]]]] about to merge address [[[[[[[[[[[[[[[[[[[[[");

this.em.merge(addr);}

}

HL7Address的相關(guān)部分現(xiàn)在是:

@ManyToOne(fetch=FetchType.EAGER)

@JoinColumns({ @JoinColumn(name = "usecode", referencedColumnName = "code", insertable = false, updatable = false),

@JoinColumn(name = "usecodesystem", referencedColumnName = "codesystem", insertable = false, updatable = false)

})

public HL7GeneralCode use;

HL7GeneralCode的相關(guān)部分現(xiàn)在是:

@OneToMany(mappedBy = "use")

private Set addresses;

我該如何解決這個(gè)錯(cuò)誤?

第三次編輯:

我通過(guò)將以下代碼添加到保存地址方法來(lái)遵循ben75的建議:

if(addr.getUse() != null && !this.em.contains(addr.getUse())){

System.out.println("about to this.em.persist(addr.getUse());");

this.em.persist(addr.getUse());return;

}

不幸的是,盡管堆棧跟蹤SYSO指示上面的代碼在應(yīng)用程序崩潰之前運(yùn)行,但我仍然得到相同的錯(cuò)誤.

總結(jié)

以上是生活随笔為你收集整理的java primary,java – 键’PRIMARY’的重复条目’string1-string2′的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。