我有一个线程休眠问题。我有一个多对一关系,其中包含两个城市对象。通过该线程,我的 trackDao 有可能获得许多 trackEntitys 以坚持女巫包括同一个城市(邮政编码是唯一的)。
在 trackDao 坚持第一个实体后,我得到一个“重复实体异常”。
是否可以通过注释进行配置以强制获取优先保存以获取现有的 childId 并恢复 parrent 持久化?
谢谢
谢谢你的时间。
在尝试保存城市以从 db 获取可能已经存在的城市(具有相同的邮政编码)之前,我尝试手动获取。
现在一次旅行包括两个城市。一个城市女巫已经存储在数据库中(objectId!= null),另一个城市女巫必须持久化(objectId == null)
虽然休眠现在必须知道 city1 已经持久化,只有 city2 必须在城市表中持久化,但我得到一个“重复实体异常”。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;