当前位置: 首页 > 知识库问答 >
问题:

Hibernate文档:父/子类型关系

艾浩广
2023-03-14

在Hibernate文档中,有这样一句话:

Hibernate中一对多关联的默认语义与父/子关系的常用语义相比,与复合元素映射的语义要差得多。

我发现这句话很混乱,有人能解释一下它的意思吗?此外,在Best Pratices页面上,您会发现

编写细粒度的类并使用映射它们

我不知道如何理解这些。映射是否使用


共有1个答案

米飞龙
2023-03-14

案例1:Hibernate中一对多关联的默认语义与父/子关系的常用语义相比,与复合元素映射的语义要差得多。指:-

假设您有两个名为A

案例2:编写细粒度类并使用

Hibernate中的单词组件是指另一个对象中包含的对象

例如:您有一个Person对象,其中包含各种字段,即id、firstName、lastName、address、age等。然后您可以在数据库中创建一个表,如下所示:

drop table if exists Person
create table Person(
     id int,
     firstName varchar(50),
     lastName varchar(50),
     street varchar(50),
     state varchar(50),
     zipcode int(8),
     age int(3)
);

现在,您需要创建两个pojo类,即,Person

public class Person {
    private int id;
    private String firstName;
    private String lastName;
    private int age;
    private Address address;

    //getter/setter
}

public class Address {
    private String street;
    private String state;
    private int zipCode;

    //getter/setter
}

要在这个场景中引入合成,可以使用

如果为Person类创建XML文件,则可能如下所示:

<hibernate-mapping>
   <class name="Person" table="Person">
      <id name="id" type="int" column="id">
         <generator class="native"/>
      </id>
      <component name="address" class="Address">
         <property name="street" column="street" type="String"/>
         <property name="state" column="state" type="String"/>
         <property name="zipcode" column="zipcode" type="int"/>
      </component>
      <property name="firstName" column="firstName" type="String"/>
      <property name="lastName" column="lastName" type="String"/>
      <property name="age" column="age" type="int"/>
   </class>
</hibernate-mapping>

另一方面,使用@Embedded

public class Person {
    @Id
    @GeneratedValue
    private int id;
    private String firstName;
    private String lastName;
    private int age;
    @Embedded
    private Address address;

    //getter/setter
}

@Embeddable
public class Address {
    private String street;
    private String state;
    private int zipCode;

    //getter/setter
}

@Embedded注释用于指定;地址实体应作为一个组件存储在Person表中。

@可嵌入注释用于指定;Address类将用作组件。Address类不能有自己的主键,它使用封闭类主键。

在数据库中持久化Person:在数据库上执行插入操作时。首先需要创建Address类的对象

Address address = new Address("ABC Road", "MH", "440022");
Person person = new Person("A", "Z", 10, address);
session.save(person);

要检查Person表中的数据,您可以点击以下查询:-

mysql> select id, firstName, lastName, street, state from Person;
---------------------------------------------------
| id | firstName | lastName |   street  |  state  |
---------------------------------------------------
|  1 | A         | Z        |  ABC Road |   MH    |
|  2 | B         | Y        |  XYZ Road |   MP    |
---------------------------------------------------
2 rows in set (0.00 sec)

mysql>

编辑:案例1与案例2(关联与组合):

案例1代表关联,案例2代表组合。关联意味着表示两个不同实体之间的关系,例如一对一、一对多、多对一、多对多。另一方面,组合通常被称为两个实体之间的关系,其中一个实体是另一个实体的一部分,如果包含的实体不存在容器实体就无法存在。

更多解释:关联、聚合和合成

我希望这对你有帮助。

 类似资料:
  • 问题内容: 我正在为我们运行概念验证,以便对ES中更多“标准化”的数据运行嵌套查询。 例如带有嵌套 客户->-名称 -电子邮件-事件->-创建-类型 现在,我可以将给定客户的事件列表移至另一位客户。例如,客户A有50个事件客户B有5000个事件 我现在想将所有事件从客户A移动到客户B 拥有数百万客户的规模,并且在UI中针对图形进行查询,Parent / Child更适合还是应该能够嵌套处理? 在我

  • 我有一个场景,需要在一种情况下加载所有子值,在另一种情况下加载一些特定的子值。我对这两种情况都使用一个bean,并使用命名查询编写查询。 现在在我的查询2中,我只需要加载字符串A,而不需要加载字符串B和字符串C。我试过使用 但得到以下错误 那么,关于如何继续这方面的任何建议。。

  • 使用JPA(Hibernate)我试图实现以下关系,并想知道其他人是否对最佳方法有任何建议: 基本上是完全不相关的对象,每个对象都有一个公共子对象的集合;在对象模型中实现简单,在数据库中稍微麻烦些! 我确信这一定是常见的事情,但是我很难找到任何示例实现,因为我真的不知道正确的搜索词。 谢谢你的时间!

  • 为了查询子集合和父文档,我对firest的文档及其最佳实践有一些问题。我试图使用Typecript在我的Firebase函数中进行查询。 DB: ├── 用户(集合) │ └── 用户(ID为的文档) │ │ └── 计划(子集合) 我有一个数组中的用户ID列表,我需要从用户文档和当前文档的子集合计划中收集信息。 但是如何从用户文档和子集合(计划)文档(当前)中获取数据,我不知道在场景中最有效的查

  • 问题内容: 我想使用Elasticsearch.Net/NEST搜索相关文档。例如,我有: 我想分别存储“个人”和“地址”文档,并根据“地址”字段查询返回“个人”文档的位置。例如,返回居住在波士顿的人的所有文件。我已经在Elaticsearch文档中看到了一些使用映射和父/子指令的示例,但对于Elasticsearch.Net/NEST没有看到任何示例。任何代码示例或指针将不胜感激… 问题答案:

  • 我对Java语言中的类型化有一个误解。问题是ClassCastException。例如,在这段代码中,假设动物是Dog类的父类,