0

我有一个线程休眠问题。我有一个多对一关系,其中包含两个城市对象。通过该线程,我的 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;
4

1 回答 1

0

我认为一条赛道有两个相同的城市。我对 Order ->* Product 也有同样的问题。但这是应用程序中的一个错误,订单不能有重复的产品。我不知道您的情况允许什么,但我建议您调查 City 类并寻找 equals 方法。如果您在 Track 类中有 java.util.List 来保存城市,那么该列表可能有两个相同对象的元素 (==)。

于 2013-10-19T07:56:29.797 回答