我有一個線程休眠問題。 我與包含兩個城市對象的軌道有ManyToOne關係。 通過線程,我的trackDao可能會獲得許多trackEntitys來堅持女巫包括同一個城市(郵編是唯一的)。休眠 - 保存子如果不存在
trackDao堅持第一個實體後,我得到一個「重複的實體異常」。
是否可以通過annotaition進行配置來強制一個get bevore save來獲取現有的childId並恢復parrent持久化?
THX
THX您的時間。
我嘗試手動獲取,然後嘗試保存城市以從數據庫獲取可能已存在的城市(使用相同的郵政編碼)。
現在,一次旅行包括兩個城市。 一個城市女巫媒體鏈接存儲在數據庫(OBJECTID!= NULL) 和其他城市巫婆必須得到堅持(OBJECTID == NULL)
雖然現在冬眠必須知道city1已經持續了僅位於City2有要堅持城市表我會得到一個「重複的實體例外」。 Hibernate將再次存儲現有的城市。 爲了解決這個問題,我超越了我的tripDao的通用保存方法並處理了城市持續的手冊。 - >只要保存城市,如果city.getId()== null。 所以我得到一個沒有存儲的旅行對象女巫包括兩個已經存儲的城市。如果我試圖堅持這一趟對象我得到的消息休眠
「錯誤而堅持trackjavax.persistence.PersistenceException:org.hibernate.PersistentObjectException:通過分離的實體堅持:德.... CityEntity」
我相信我有一些配置錯誤。
請幫忙。
我不想超越保存方法和商店rearate手冊。在我看來,必須默認工作,或不是?
@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;
你能發表一些代碼嗎?你使用的是什麼主鍵? – Thor