【发布时间】:2012-11-15 15:59:54
【问题描述】:
我正在使用 Spring、JPA、Hibernate 开发 Java EE 应用程序。
在我们的业务模型中,我们有几个反向引用,OneToMany 或 OneToOne。 我们需要它来进行处理。
我们最终拥有许多自动处理反向引用的设置器:
class Dog {
@OneToOne
private DogOwner owner;
public void setOwner(DogOwner owner) {
this.owner = owner;
if (!this.owner.getDog().equal(this)) {
owner.setDog(this);
}
}
[...]
}
class DogOwner {
@OneToOne(mappedBy="owner")
private Dog dog;
public void setDog(Dog dog) {
this.dog = dog;
if (!this.dog.getOwner().equal(this)) {
dog.setOwner(this)
}
}
[...]
}
OneToMany 关联和集合/列表上的 add() 方法也是如此。
这可行,但为所有反向引用编写那些自动设置器有点乏味且容易出错。
由于 JPA 具有所有必需的注解并借助 Spring / OAP 的强大功能,是否有一些配置或框架可以自动处理?
编辑:示例
为了澄清,我希望反向引用在我的模型中自动保持连贯,甚至在执行“持久化”之前。
这是我想要的行为:
Dog rex = new Dog();
Dog mirza = new Dog();
DogOwner bob = new DogOwner();
bob.setDog(rex);
assert(rex.getOwner() == bob);
bob.setDog(mirza);
assert(rex.getOwner() == null);
assert(mirza.getOwner() == bob);
如果没有,我想我要自己写了。
【问题讨论】:
-
我错过了你的问题。你的目标是什么?
-
您知道从技术上讲您不必修改非拥有方(带有
mappedBy的一方)?仅使用拥有方。 -
@CycDemo,请参阅我编辑中的示例。
标签: java spring hibernate jpa aop