亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

休眠異常:由 jpa 本身調用的共享引用 (?)

休眠異常:由 jpa 本身調用的共享引用 (?)

胡子哥哥 2022-09-22 10:31:11
我目前遇到一些麻煩,將對象寫入數據庫。我的問題確實出現在一個相當復雜的數據模型中,但我會嘗試將其分解為一個可以理解的示例。假設有 A 類:@Entity(name = "a")@Table(schema = "foo")public class A {    private static final long serialVersionUID = -5305374150112492804L;    logger = LoggerFactory.getLogger(A.class);    @Id    @Column(name = "tid", nullable = false, unique = true)    @SequenceGenerator(name = "globalSequenceGen", schema = "foo", sequenceName = "foo_sequence")    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "globalSequenceGen")    private Integer TID;    @Column(name = "b")    private String bId;    @OneToMany(targetEntity = B.class)    @JoinColumn(name = "random_b_attribute", referencedColumnName = "b", updatable = false, insertable = false)    private List<B> b;    @PrePersist    @PreUpdate    public void prePersist() {        bId = b == null || b.isEmpty() ? null : b.get(0).getRandomAttribute();    }    ...}引用的類 B 非常簡單:它只包含帶注釋的屬性。請注意,A 的實例可以并且將在其屬性中引用 B的相同“集合”。@Columnb問題來了:我確實從數據庫中檢索D的對象(懶惰)。它們都不引用A的任何對象(例如,數據庫中的列a為空)。我確實從數據庫中檢索了A的所有對象,就像我后來想將它們插入D實例(也是懶惰的)一樣。EntityManager我不碰任何或屬性。D#aA#b嘗試任何新創建的 D 實例最終都會得到以下異常:EntityManager#persistCaused by: org.hibernate.HibernateException: Found shared references to a collection: random.package.structure.A.b在我的研究中,我發現,在提供相同的條目時可能會導致錯誤(不要與具有相同條目混淆)。顯然,這源于jpa本身對A實例的初始化?!似乎,回收相同的是一個好主意,但是在更新未更改的對象時顯然會引起問題...CollectionCollectionCollection清除之前保留的對象似乎可以解決問題。但是,由于所有內容都是懶惰的,因此以后使用這些對象會導致其他問題。EntityManager對于如何為每個 A 實例創建新 s 或以其他方式防止故障,您是否有任何提示?Collection提前非常感謝,如果我確實錯過了任何信息,請直接詢問!
查看完整描述

1 回答

?
嚕嚕噠

TA貢獻1784條經驗 獲得超7個贊

當然,這是一種關系。我改變了我的數據模型(使用映射表),這解決了我的問題!@ManyToMany



查看完整回答
反對 回復 2022-09-22
  • 1 回答
  • 0 關注
  • 107 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號