我的数据库技能有点生疏,所以对我来说学习Hibernate有点难。
我一直在阅读一对一、一对多和多对多,简而言之,这是我年轻时的理解:
一对一:-表A链接到表B中的另一行,表A中的行数必须等于表B中的行数。
一对多:-每家公司可以有很多员工。
多对多:-许多医生可以拥有/分享不同的病人。(无意双关语)。
假设我有以下表格,对于殡仪员客户模型
[id[pk]、全名(char)、年龄(int)、地址(char)、发送花(boolean)、国家(fk)、何时(fk)]
1号,马丁·詹森,91号,诺幸运街4号,假,2号,1号
2.《杀手克劳斯》67.《死硬街9号》,对,1,2
2,“宾果人”,46,“秘密地址”,真实,1,2
表格:国家
[id[pk],名称(char)]
1.“德国”
2.“朝鲜”
表:Whended
[id[pk],actionToTake(字符)]
1.“忽略/不可能拾取”
2.“火化/模仿亲属并收取保险”
在正常情况下,如果我需要这些表中的一些信息,我只会使用两个外键的连接,使用普通SQL。(fx描述,而不仅仅是id)。每个人只能连接到一个国家和一个Whendie表,但是,当然,为了避免重复,多人应该能够引用相同的外键值。
我试图在HiberNate中使用@OneToOne注释,将这两个表的列名作为实体上的外键id。它起作用了,但是,它似乎违背了OneToOne的含义...“一个表中的每一行在另一个表中都有相应的行”和“行数,必须在两个表中匹配”。
使用一对多或多对多似乎不自然。
有人能把我推向正确的方向吗,还是我应该继续使用OneToOne,每个印度hibernate教程都说“除非你有很大的设计缺陷,否则永远不会使用OneToOne”
你搞错了,你忘记了一种联系:很多。
让我们以你为例:
>
一个A有0、1或几个B。例如:一个公司有很多员工。
多通:A有0或一个B,B可以与多个A关联。例如:一个人有一个父亲(一个父亲可能有几个孩子)。
许多:A有0、1或几个B,B可以与0、一个或几个A相关联。典型例子:一个学生有许多课程,一个课程后面跟着几个学生。
因此,对于表/实体,您有以下关联:
事实上,几个人生活在同一个国家,但一个人生活在0或1个国家。有几个人可能希望被火化(不确定这是正确的英语),但一个人不能同时被火化和埋葬。
当然,您可以选择使这些关联具有双向性,甚至只在另一个方向上实现它们。在这种情况下,你会
简而言之,每次你有一个从一个表到另一个表的外键时,你都有一个ManyToOne或OneToOne关联。如果你能给外键设置一个唯一的约束,那就是一个OneToOne,因为可以保证第一个表的两行不能引用目标表的同一行。否则,它就是一个ManyToOne。
我有两张桌子: 基本上,我想通过id字段定义一个从到的外键,这两个表中的字段是相同的。问题是,当我在IntelliJ Idea中检查数据库时,我在Keys部分没有看到任何外键(检查了两个表),只有它们的PK。这段代码有问题吗?我已经按照另一个类似问题中的建议设置了属性:
我有一个这样的实体: 多谢了,安德里亚
我可以这样做吗?或者有没有其他更好的方法来处理这种情况
问题内容: 它是有效申报,并在关系的双方,如: 我找不到任何表明这是无效的信息,但似乎在持久性过程中,至少必须违反关系的一侧。(例如,如果首先写入changeEntry,则changeEntryDetails临时为null)。 尝试此操作时,我看到抛出了异常。 我想避免在可能的情况下放宽约束,因为双方都 必须 存在。 问题答案: 声明并在关系的两边是否合法(…)我找不到任何表明无效的内容,但是在持
我有一个@OneToOne关系映射。我可以获取记录并查看关系,但我无法创建记录并保留外键。目前,当在父表(FacilityGeneral)中创建新记录时,我也会在子表(FacilityLocation)中创建新记录,但是,子表中的外键不会自动创建。 我试图通过编程将创建为父表(FacilityGeneral)中主键的序列值分配给子表中的不同字段来持久化它,但由于序列#在对象持久化之前不会生成,因此
问题内容: 我看不到“多对一”关系与“一对一”关系的架构有什么区别: 与 有什么区别吗? 问题答案: 它们在架构上看起来完全相同,但是在Hibernate Layer上有所不同。 如果尝试这样的操作: 一切都会好起来的。但是,保存后,如果您尝试获取订单: 当然,在两种情况下,您的Address类应该看起来有所不同。