【问题标题】:Problem with CascadeType.ALL and lifecycle callbacksCascadeType.ALL 和生命周期回调的问题
【发布时间】:2011-06-15 08:28:42
【问题描述】:

我在存储这个简单的映射时遇到了一些问题:

@Entity
public class Account extends UUIDBase {
    private Profile profile;

    @OneToOne(cascade = CascadeType.ALL, optional = false)
    public Profile getProfile() {
       return profile;
    }

    public void setProfile(Profile profile) {
        this.profile = profile;
    }
}

@Entity
public class Profile extends UUIDBase {
  ...
}

我们的实体具有所有属性“creationDate”和“lastUpdated”。这些属性放置在映射的超类 UUIDBase 中。当实体被持久化或更新时,两个字段都将在 @PrePersist 和 @PreUpdate 回调中更新。除了在级联的情况下,这工作正常。

当我们存储 Account 时,Profile 也将始终被存储。账户的 creationDate 和 lastUpdated 属性将通过回调方法初始化。配置文件的回调方法将不会被调用。你有什么提示吗?

【问题讨论】:

  • 我不知道为什么这对你不起作用。你能指定你正在使用哪个 jpa 实现吗?将标签 callback 替换为框架名称可能会有所帮助。
  • 您好,我们使用 JPA 和 Eclipselink V2.2 实现。
  • 我发现了一个类似的问题,但我不确定这是否属于我的问题以及如何解决问题。 stackoverflow.com/questions/1877499/…

标签: jpa eclipselink lifecycle cascade one-to-one


【解决方案1】:

他们应该被调用。确保您正确注册回调。

最近修复了未调用 MappedSuperclass 上的回调的问题,因此您可能需要在 2.2 中将回调添加到子类。

您确定没有调用回调,还是只是没有更新这些值?

如果你直接在配置文件上调用persist,是否调用回调?

如何注册回调?

【讨论】:

    【解决方案2】:

    感谢您的回答。我想我现在修好了。我在上面描述了两个实体“帐户”和“个人资料”。我上面的描述中缺少实体“员工”。这是映射:

    @Entity
    public class Employee extends UUIDBase {
        public Account account;
    
        @OneToOne(cascade = {CascadeType.REFRESH, CascadeType.REMOVE}, orphanRemoval = true)
        public Account getAccount() {
            return this.account;
        }
    
        public void setAccount(Account account) { 
            this.account = account;
        } 
    

    }

    映射是“一个员工可以有一个帐户。一个帐户必须有一个配置文件”。问题出在服务类中:

    public void saveEmployee(Employee data) {
        Employee savedEmployee = empDao.saveEmployee(data);
        accountService.saveAccount(data.getAccount()); <-- Here is the failure
    }
    

    首先我保存员工并取回保存的员工对象。之后,我尝试通过自己的服务保存员工帐户。当我考虑到保存的员工对象时,一切正常并调用回调。当我从“数据”参数中获取帐户时,不会调用回调。

    【讨论】:

      猜你喜欢
      • 2021-05-31
      • 2023-01-18
      • 1970-01-01
      • 1970-01-01
      • 2016-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多