问题描述
|
我在存储此简单映射时遇到一些问题:
@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回调中更新。除级联的情况外,这都可以正常工作。
当我们存储帐户时,配置文件也将始终被存储。帐户的creationDate和lastUpdated属性将通过回调方法进行初始化。配置文件的回调方法将不会被调用。您有什么提示吗?
解决方法
应该给他们打电话。确保您正确注册了回调。
MappedSuper类上的回调未得到调用的问题最近已修复,因此您可能需要将回调添加到2.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
}
首先,我保存了雇员,并取回了保存的雇员对象。之后,我尝试通过自己的服务保存员工帐户。当我考虑到已保存的雇员对象时,一切正常,并调用回调。当我从\“ data \”参数获取帐户时,不会调用回调。