【问题标题】:Hibernate - Save Child if not persist休眠 - 如果不持久,则保存孩子
【发布时间】:2013-10-28 02:14:12
【问题描述】:

我遇到了线程休眠问题。 我有一个多对一关系,其中包含两个城市对象。 通过该线程,我的 trackDao 可能会获得许多 trackEntitys 来坚持女巫包括同一个城市(邮政编码是唯一的)。

trackDao 坚持第一个实体后,我得到一个“重复实体异常”。

是否可以通过注释进行配置以强制获取优先保存以获取现有的 childId 并恢复 parrent 持久化?

谢谢


感谢您的宝贵时间。

在尝试保存城市以从 db 获取可能已经存在的城市(具有相同的邮政编码)之前,我尝试手动获取。

现在,一次旅行包括两个城市。 一个城市女巫已经存储在数据库中(objectId!= null) 和另一个城市女巫必须坚持(objectId == null)

虽然休眠现在必须知道 city1 已经持久化,但只有 city2 必须在城市表中持久化,但我得到一个“重复实体异常”。 Hibernate 将再次存储现有的城市。 为了解决这个问题,我超越了 tripDao 的通用保存方法并处理了城市持久化手册。 -> 如果 city.getId() == null 则只保存城市。 所以我得到了一个未存储的旅行对象,女巫包括两个已经存储的城市。如果我尝试保留该行程对象,我会收到休眠消息

“持久化跟踪javax.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;

【问题讨论】:

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

标签: java hibernate jpa duplicates unique


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    • 1970-01-01
    相关资源
    最近更新 更多