Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate:多个FK关系_Java_Hibernate - Fatal编程技术网

Java Hibernate:多个FK关系

Java Hibernate:多个FK关系,java,hibernate,Java,Hibernate,我有点难以定义Hibernate实体: 假设数据库中有以下两个表: (A) 来自公司 公司 维娅公司 (B) 公司ID(PK) 描述 其中(A)的元素指向(B)的主键;因此,FKs和PK之间存在3种一一对应的关系。 我假设3个不同mappedBy条件的OneTONE语句不是正确的方法,mh?这是漫长的一天——我可能就是不明白;) 谢谢你的帮助 你当然可以通过一对一的关系做到这一点。在A类中有三个Company对象和相应的映射 如果我们能看到代码和hibernate映射,这会有所帮助。这是

我有点难以定义Hibernate实体:

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

(A)

  • 来自公司
  • 公司
  • 维娅公司
(B)

  • 公司ID(PK)
  • 描述
其中(A)的元素指向(B)的主键;因此,FKs和PK之间存在3种一一对应的关系。 我假设3个不同mappedBy条件的OneTONE语句不是正确的方法,mh?这是漫长的一天——我可能就是不明白;)


谢谢你的帮助

你当然可以通过一对一的关系做到这一点。在A类中有三个Company对象和相应的映射


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

这是实现类A的最简单方法,有3个指向类B的多通关系

@Entity
class ClassA {

    //@ID
    //private id;

    @ManyToOne
    private ClassB from;

    @ManyToOne
    private ClassB toCompany;

    @ManyToOne
    private ClassB viaCompany;
}
不起作用,因为每个实体都需要一个Id。您可以尝试通过使用组合Id(由三个关联组成)来克服这个问题,但我想实现由与其他实体的关联组成的Id会带来很多麻烦

@看

Hibernate提供的另一种方式是所谓的三元关联在本例中,您以三元m:n关系的形式对整个表A进行建模但这也是一项非常复杂的任务


@请参见

如果我理解正确,您希望您的数据库如下所示:

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

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

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

见此:

这绝对是一个而不是多个吗?如果表A是一个发货表,那么表B中的一家公司能否只发货一件商品呢?非常感谢各位——现在几个小时的睡眠之后,我恢复了思考的能力;)为打扰你感到有点抱歉。桌子的结构确实如你所想。是的,一对一关系的概念来自应用程序场景。虽然有可能,例如fromCompany和viaCompany使用相同的ID,但我倾向于将它们视为两个语义不同的对象,因为公司本身在每个数据字段中扮演不同的角色……很难描述,也无法解释整个事件。但你肯定是对的,一般来说,一对多关系可能是更好的方式。