我目前遇到一些麻煩,將對象寫入數(shù)據(jù)庫。我的問題確實(shí)出現(xiàn)在一個相當(dāng)復(fù)雜的數(shù)據(jù)模型中,但我會嘗試將其分解為一個可以理解的示例。假設(shè)有 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 的實(shí)例可以并且將在其屬性中引用 B的相同“集合”。@Columnb問題來了:我確實(shí)從數(shù)據(jù)庫中檢索D的對象(懶惰)。它們都不引用A的任何對象(例如,數(shù)據(jù)庫中的列a為空)。我確實(shí)從數(shù)據(jù)庫中檢索了A的所有對象,就像我后來想將它們插入D實(shí)例(也是懶惰的)一樣。EntityManager我不碰任何或?qū)傩浴#aA#b嘗試任何新創(chuàng)建的 D 實(shí)例最終都會得到以下異常:EntityManager#persistCaused by: org.hibernate.HibernateException: Found shared references to a collection: random.package.structure.A.b在我的研究中,我發(fā)現(xiàn),在提供相同的條目時可能會導(dǎo)致錯誤(不要與具有相同條目混淆)。顯然,這源于jpa本身對A實(shí)例的初始化?!似乎,回收相同的是一個好主意,但是在更新未更改的對象時顯然會引起問題...CollectionCollectionCollection清除之前保留的對象似乎可以解決問題。但是,由于所有內(nèi)容都是懶惰的,因此以后使用這些對象會導(dǎo)致其他問題。EntityManager對于如何為每個 A 實(shí)例創(chuàng)建新 s 或以其他方式防止故障,您是否有任何提示?Collection提前非常感謝,如果我確實(shí)錯過了任何信息,請直接詢問!
1 回答

嚕嚕噠
TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超7個贊
當(dāng)然,這是一種關(guān)系。我改變了我的數(shù)據(jù)模型(使用映射表),這解決了我的問題!@ManyToMany
添加回答
舉報
0/150
提交
取消