【问题标题】:Hibernate mapping for cyclic relation ships循环关系的休眠映射
【发布时间】:2013-04-27 10:39:07
【问题描述】:

我正在学习休眠,并且正在开发一个非常小的项目用于学习目的。我有一个问题

我有两个项目 1.com.common.model 2. com.amar.model

在第一个项目(com.common.model)中有一个名为“Person.java”的类,它有自己的“Person.hbm.xml”文件。 这个人类有一个属性,比如名字、姓氏等。这个人有很多地址,比如

public class Person {
private String fn;
private String ln;
private Set<Address> addresses;

//getters and setters
}

此地址类存在于第二个项目(com.amar.model)中

public class Address {
private String street;
private String city;

private Person person; -- Cause for cyclic dependency. How can I avoid this cyclic dependency and how can I map these properties with hibernate ?

// getters and setters
}

这个地址也有自己的“Address.hbm.xml”

这两个类都存在依赖关系。我的意思是一个人有多个地址,而且一个地址只与一个人有关。所以如果我在地址类中添加一个人条目,它将显示一个循环依赖错误。如果我将这个地址类移动到 common.model 包中,我的问题将会解决,但是如果我以后遇到这个问题,我该如何克服这个问题。

那么我该如何避免这种情况,以及如何为这两件事创建映射。

【问题讨论】:

    标签: hibernate


    【解决方案1】:

    interfaceabstract class 放入您的库中,然后在您的其他项目中实现它。

    您的Address 有一个Person,即interfaceabstract class

    您的Person 然后变为PersonImplimplements Personextends Person

    然后你必须使用one of the inheritance mapping strategies 告诉hibernate。

    【讨论】:

    • 谢谢@Boris 我添加了我的理解作为答案。能否请您反馈一下我的理解是否正确...
    【解决方案2】:

    谢谢 Boris,所以首先我需要再创建一个项目,这个新项目可以被我的前两个项目使用。这个新项目有一个新的抽象类或接口,叫做 Person like this

    在新项目中:

    public abtsract class Person {
    //properties
    
    private Set<Address> addresses;
    
    //getters and setters
    }
    

    在第一个项目中:

    public class PersonImpl extends Person {
    
    }
    

    在第二个项目中:

    public class Address {
    // properties
    
    private Person person;.
    }
    

    映射是通过“继承映射”这个概念来完成的。是不是鲍里斯?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多