gpt4 book ai didi

java - 自动设置反向引用

转载 作者:行者123 更新时间:2023-12-02 22:48:18 25 4
gpt4 key购买 nike

我正在使用 SpringJPAHibernate 开发 Java EE 应用程序。

在我们的业务模型中,我们有多个反向引用,要么是 OneToMany,要么是 OneToOne。我们需要它来进行处理。

我们最终有许多自动处理反向引用的 setter :

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() 方法也是如此。

这可行,但为所有反向引用编写这些自动 setter 有点乏味且容易出错。

既然JPA拥有所有必需的注释并且具有Spring/OAP的强大功能,是否有一些配置或框架可以自动处理它?<​​/p>

编辑:示例

为了澄清,我希望反向引用在我的模型中自动保持一致,即使在执行“坚持”之前也是如此。

这是我想要的行为:

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);

如果没有,我想我要写自己的了。

最佳答案

您需要确保逆关系正常工作。可以试试这个:

@OneToOne
@JoinColumn(name="OWNER_ID", unique= true, nullable=true, insertable=true, updatable=true)
private DogOwner owner;

事情是这样的:JPA/OneToOneMappingBidirection.htm">http://www.java2s.com/Tutorial/Java/0355_JPA/OneToOneMappingBidirection.htm

关于java - 自动设置反向引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13401364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com