Hibernate:多个FK关系

时间:2010-11-30 15:12:26

标签: java hibernate

我有点难以定义一个Hibernate实体:

假设我在数据库中有以下两个表:

(A)

  • fromCompany
  • toCompany
  • viaCompany

(B)

  • companyID(PK)
  • 描述

其中(A)的元素指向(B)的主键;所以FK和PK之间存在3个一对一的关系。 我假设3个具有不同mappedBy条件的OneToOne语句不是要走的路,是吗?已经过了漫长的一天 - 我可能只是没有得到它;)

感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

你当然可以通过一对一的关系来做到这一点。你的A类中有三个公司对象,以及适当的映射。

如果我们能看到代码和hibernate映射,那将会有所帮助。

答案 1 :(得分:0)

实现A类的最简单方法,其中3个ManyToOne关系指向ClassB

@Entity
class ClassA {

    //@ID
    //private id;

    @ManyToOne
    private ClassB from;

    @ManyToOne
    private ClassB toCompany;

    @ManyToOne
    private ClassB viaCompany;
}

不起作用,因为每个实体都需要一个ID。 - 您可以尝试通过使用组合ID(由三个关联组成)来克服此问题,但我想这会导致实现包含与其他实体的关联的ID的麻烦。

@see Hibernate/persistence without @Id

Hibernate提供的另一种方式是所谓的三元关联。 - 在这种情况下,您以三元m:n关系的形式对完整的表格A进行建模。 - 但这也是一项非常复杂的任务。

@see http://docs.jboss.org/hibernate/core/3.5/reference/en/html/collections.html#collections-ternary

答案 2 :(得分:0)

如果我理解正确,您希望数据库看起来像这样:

tableA
- id
- fromCompanyId (references tableB.id)
- toCompanyId (references tableB.id)
- viaCompanyId (references tableB.id)

tableB
- id
- description

如果是这样,你当然可以拥有这个。您只需要覆盖关系的默认列名,以便每个关联都有自己的列名,而不是回退到默认名称,这将使三个关联具有相同的名称,从而导致问题。

我不同意OneToOne,但我认为这是一个有意识的决定。

看到这个: http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/entity.html#entity-mapping-association