【问题标题】:CascadeType.All not updating other entity in a relationCascadeType.All 不更新关系中的其他实体
【发布时间】:2015-01-30 06:34:33
【问题描述】:

我有 2 个具有一对一关系 Employer 和 EmployerDetails 的实体,如下所示:

雇主

public class Employers {
     @Id //signifies the primary key
     @Column(name = "id", nullable = false)
     @GeneratedValue(strategy = GenerationType.AUTO)
     private Long id;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "employerDetials_id")
    private EmployerDetails employerDetails;
}

雇主详情

public class EmployerDetails {


    @Id
    @Column(name = "employerDetails_id", nullable = false)
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long employerDetails_id;

    private Long address;

}

据我所知,更新EmployerEmployerDetails 应该因为cascadeType.All 而更新

更新雇主代码

 public void update(Long id) {

        this.setId(id);
        JPA.em().merge(this);
    }

我的问题是当我调用上述函数时会发生什么

insert into EmployerDetails(id,address) values(1,"newaddress");   then
update Employer set employerDetails_id=1;

我对@9​​87654328@ 的理解是它确实是(PERSIST,MERGE,REMOVE,DELETE etc),所以EmployerDetails 应该更新而不是在更新Employer 时插入(如果我错了,请纠正我)。

因此,每次我更新 Employer 时,都会在 EmployerDetails 中创建一个新行,并使用新的 employerDetails_id 更新 Employer 而不影响(未删除未更新)EmployedDetails 中的先前行。

是不是我做错了什么?

谢谢

【问题讨论】:

  • @hragheb 这是我的实际代码。我删除了其他字段并只发布了所需的代码
  • Employers 的 PK 是什么。update() 方法在哪里?
  • @hragheb 抱歉忘记在上面的代码中将 id 输入到雇主中,更新我的问题
  • downvoter 关心解释?

标签: java jpa playframework playframework-2.2 one-to-one


【解决方案1】:

您无法更新设置为自动生成的 PK。您在 PK 中设置的任何值都将被忽略,持久性提供程序将创建一个新值。

【讨论】:

  • 我正在设置 Employer 实体的 id 并对其进行了更新,问题是 EmployerDetails 实体在我更新 Employer 实体时被插入
  • 因为 id 列默认是可插入和可更新的。但是,逻辑仍然意味着它是一个新实体,因此任何与 Employer 相关的实体都被视为新实体。
  • 您可以尝试在 EmployerDetails 中使用 Employer 的新 id 值设置 FK,并检查是否会更新而不是插入新的 Employer 详细信息
  • 所以你说this.setid(id) 没有区别所以如果我不这样做,我将如何将我的旧行与新行合并(我已经检查了他们使用相同方法的播放示例项目)并且我希望我的关系是单向的,所以我在employeeDetails 中没有任何雇主colm
  • 我的意思是做这个 public void update(Long id) { this.getEmployerDetails().setId(id); this.setId(id); JPA.em().merge(this); }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多