我有一个线程休眠问题。 我与包含两个城市对象的轨道有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