[英]Hibernate - Save Child if not persist
我有一個線程休眠問題。 我有一個與跟蹤項包括多個城市對象的ManyToOne關系。 通過該線程,我的trackDao可能會獲得許多trackEntity來持久化包含同一城市的郵政編碼(郵政編碼是唯一的)。
在trackDao堅持后,第一個實體我得到“重復實體例外”。
是否可以通過注釋進行配置,以強制進行一次保存保存以獲取現有的childId並繼續保留父項?
謝謝
謝謝你的時間。
在嘗試保存城市以從db獲取可能已經存在的城市(具有相同的郵政編碼)之前,我嘗試了手動獲取。
現在的行程包括兩個城市。 一個城市女巫已經准備好存儲在db中(objectId!= null),而另一個城市女巫必須持久化(objectId == null)
盡管休眠現在必須知道city1已經存在,但只有city2必須在city-table中保持存在,但是我得到了“重復實體異常”。 Hibernate將再次存儲現有城市。 為了解決這個問題,我壓倒了tripDao的通用保存方法,並處理了該城市維護手冊。 ->如果city.getId()== null,則保存城市。 因此,我得到一個未存儲的旅行對象,其中包括兩個已經存儲的城市。 如果我嘗試保持該旅行對象,則會收到休眠消息
“持久化trackjavax.persistence.PersistenceException時出錯:org.hibernate.PersistentObjectException:傳遞給持久化的分離實體:de .... CityEntity”
我相信我有一些配置完全錯誤的東西。
請幫助。
我不想過分保存方法並手動存儲實現。 我認為默認情況下必須工作嗎?
@Entity
@Table(name = "tracks", uniqueConstraints = @UniqueConstraint(columnNames = { "city1_id", "city2_id" }))
@SessionScoped
public class TrackEntity extends BaseEntity {
private static final long serialVersionUID = 4696847902782174082L;
@ManyToOne(targetEntity = CityEntity.class, fetch = FetchType.EAGER, cascade = CascadeType.PERSIST, optional=false)
@JoinColumn(name="city1_id")
private CityEntity city1;
@ManyToOne(targetEntity = CityEntity.class, fetch = FetchType.EAGER, cascade = CascadeType.PERSIST, optional=false)
@JoinColumn(name="city2_id", referencedColumnName="id")
private CityEntity city2;
private Integer distance;
@Entity
@Table(name = "cities")
@SessionScoped
public class CityEntity extends BaseEntity {
private static final long serialVersionUID = 8823384603378561475L;
private String name;
@Column(unique=true)
private String zipcode;
private String latitude;
private String longitude;
我認為一條軌道有兩個相同的城市。 我在訂購-> *產品時遇到了同樣的問題。 但這是應用程序中的錯誤,訂單中不能有重復的產品。 我不知道您的情況允許什么,但建議您調查City類並尋找equals方法。 如果在Track類中具有java.util.List來容納城市,則該列表可能有兩個具有相同對象的元素(==)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.