Java Hibernate-如果未持久化,则保存子级

Java Hibernate-如果未持久化,则保存子级,java,hibernate,jpa,duplicates,unique,Java,Hibernate,Jpa,Duplicates,Unique,我有一个线程休眠问题。 我有一个包含两个城市对象的轨迹的多通关系。 通过这个线程,我的trackDao可能会得到许多trackentity,包括同一个城市(zipcode是唯一的) 在trackDao持久化第一个实体之后,我得到一个“重复实体异常” 是否可以通过注释进行配置,以强制执行get-bevore保存以获取现有的childId并恢复parrent持久化 Thx 谢谢你的时间 在尝试保存城市之前,我尝试手动获取,以从db获取可能已经存在的城市(使用相同的zipcode) 现在一次旅行包括

我有一个线程休眠问题。 我有一个包含两个城市对象的轨迹的多通关系。 通过这个线程,我的trackDao可能会得到许多trackentity,包括同一个城市(zipcode是唯一的)

在trackDao持久化第一个实体之后,我得到一个“重复实体异常”

是否可以通过注释进行配置,以强制执行get-bevore保存以获取现有的childId并恢复parrent持久化

Thx


谢谢你的时间

在尝试保存城市之前,我尝试手动获取,以从db获取可能已经存在的城市(使用相同的zipcode)

现在一次旅行包括两个城市。 一个城市女巫已准备就绪存储在数据库中(objectId!=null) 另一个城市必须得到persist(objectId==null)

虽然hibernate现在必须知道city1已经是持久化的,但是只有city2必须在city-table中获得持久化,我得到一个“重复实体异常”。Hibernate将再次存储现有城市。 为了解决这个问题,我超越了tripDao的通用保存方法,并处理了city持久化手册。->如果city.getId()==null,只需保存city即可。 所以我得到了一个未存储的trip对象,它包括两个已经存储的城市。如果我试图持久化这个trip对象,就会得到hibernate消息

“persist trackjavax.persistence.PersistenceException:org.hibernate.PersistentObjectException:传递给persist: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;

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

你能发一些代码吗?您使用的主键是什么?