首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >自动设置反向引用

自动设置反向引用
EN

Stack Overflow用户
提问于 2012-11-15 15:59:54
回答 2查看 1.1K关注 0票数 3

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

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

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

代码语言:javascript
复制
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的功能,那么是否有一些配置或框架可以自动处理呢?

编辑:示例

为了澄清,我希望后面的引用在我的模型中保持自动的一致性,甚至在进行“持久化”之前。

下面是我想要的行为:

代码语言:javascript
复制
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);

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

EN

回答 2

Stack Overflow用户

发布于 2012-11-15 19:18:14

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

代码语言:javascript
复制
@OneToOne
@JoinColumn(name="OWNER_ID", unique= true, nullable=true, insertable=true, updatable=true)
private DogOwner owner;

这就是: JPA/OneToOneMappingBidirectional.htm">JPA/OneToOneMappingBidirectional.htm

票数 0
EN

Stack Overflow用户

发布于 2012-11-16 10:34:42

我不认为会自动进行回溯。根据我的经验,我使用overload constructor

示例

代码语言:javascript
复制
public class DogOwner {
    private Dog dog;

    public DogOwner () {
    }

    public DogOwner (Dog dog) {
        this.dog = dog;
        dog.setDogOwner(this);
    }
    //getter and setter
}

public class Dog {
    private DogOwner dogOwner;

    public Dog() {
    }
    //getter and setter
}

如果是这样的话,您可以减少初始化代码如下所示;

代码语言:javascript
复制
Dog d = new Dog();
DogOwner owner = new DogOwner(d);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13401364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档