@Entity和@Embeddable有什么区别

2022-09-01 12:27:37

@Entity和@Embeddable注释之间的区别,当每个注释在类声明之前添加时?

  1. 第一个创建类作为实体,第二个从另一个表中插入列?
  2. 第一个创建类作为表,而第二个嵌入到另一个类中?
  3. 第一个将标准设置为类,第二个定义表类型
  4. 第一个为该类创建表,第二个将某些内容嵌入到不同的类中
  5. 第一个定义表属性,第二个创建两个表的并集

答案 1

@Entity对类的注释定义了它,它具有明显的独立存在。因此,我们可以运行数据库查询,而不依赖于任何其他类。 类上的注释定义了它没有独立存在。因此,如果不依赖于其他类,我们就无法运行数据库查询。下面是一个示例,以便更好地理解它:@Embeddable

@Entity
User
  -- long id
  -- String name
  -- String email
     @Embedded
  -- UserDetails userDetail

@Embeddable
UserDetails
  -- Date dateOfBirth
  -- String sex
  -- String address
  -- String maritalStatus

在这里你可以看到没有,是无用的。UserUserDetails

通常,在OOP中,我们首先设计类,然后设计数据库实体。对于某些类(如上面示例中的UserDetails类),我们不希望在DB中有单独的表,其中它们的独立存在是没有意义的。在这些情况下,我们将类标记为可嵌入。

通常,可嵌入类与嵌入它们的实体共享同一个表


答案 2

实体具有标识,可以查询。可嵌入对象没有自己的标识,只能查询使用所属实体。

如果打开实体类,则始终会找到注释 - 它是必需的。如果你打开一个可嵌入的类,你永远不会找到一个注释 - 这是被禁止的。@Id@Id

编辑:嵌入对象只能存储为父级的一部分(即在同一表中)并不完全正确。这仅适用于一对一关系。您可以在父实体中拥有可嵌入对象,它们将映射到自己的集合表。CollectionsMaps


推荐