![](/img/trans.png)
[英]Hibernate oneToMany - object references an unsaved transient instance
[英]object references an unsaved transient instance multiple relations
我在上面的代碼中有一些錯誤,錯誤說
HTTP Status 500 - Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: object references an unsaved transient instance - save the transient instance before flushing: crm.venkat.model.Accounts; nested exception is org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: crm.venkat.model.Accounts
@Entity
@Table(name="contacts")
public class Contact {
@ManyToOne(fetch=FetchType.EAGER)
@JoinTable(name = "jt_accounts_contacts", joinColumns = { @JoinColumn(name = "contactid") }, inverseJoinColumns = { @JoinColumn(name = "accountid") })
private Accounts account = new Accounts();
//Getters and Setters
}
@Entity
@Table(name="accounts")
public class Accounts {
@OneToMany(orphanRemoval=true, targetEntity=Contact.class, mappedBy="account", fetch = FetchType.EAGER, cascade=CascadeType.ALL)
@Fetch(FetchMode.SELECT)
private List<Contact> Contacts = new ArrayList<Contact>();
//Getters and Setters
}
當我插入具有填充帳戶的聯系人時,它可以工作。 如果我不填寫帳戶,則會出現錯誤。 我希望帳戶類是可選的。
這是因為您在字段初始化程序中創建了Accounts
,因此,如果它沒有被托管Accounts
實例覆蓋,則Hibernate會將其視為瞬態,並在刷新時拋出異常。
解決方案是不要在字段初始化程序中創建它:
@ManyToOne(fetch=FetchType.EAGER)
@JoinTable(name = "jt_accounts_contacts", joinColumns = {@JoinColumn(name = "contactid")}, inverseJoinColumns = {@JoinColumn(name = "accountid")})
private Accounts account;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.