小编典典

JPA @Embedded注释是强制性的吗?

java

我试图 忽略@Embedded注释,并且仍然领域已经嵌入在表中。我找不到任何能说明@Embedded注解是可选的内容。

还是 不是 可选的?

以下代码

@Embeddable
public class Address {
    String city;
    String street;
}

@Entity
public class Person {
    String name;
    @Embedded // it seems that it works even if this annotation is missing!?
    Address address;
}

生成始终相同的表

person
    name
    city
    street

即使我 没有 指定@Embedded


我的配置:

  • JBoss EAP 6.4.0
  • hibernate-jpa-2.0-api-1.0.1.Final-redhat-3.jar

JPA规范说:

http://docs.oracle.com/javaee/7/api/javax/persistence/Embedded.html

@javax.persistence.Embedded

指定实体的持久字段或属性,其值是可嵌入类的实例。必须将embeddable类注释为Embeddable。

http://docs.oracle.com/javaee/7/api/javax/persistence/Embeddable.html

@javax.persistence.Embeddable

指定一个类,其实例存储为拥有实体的固有部分并共享该实体的标识。嵌入对象的每个持久属性或字段都映射到该实体的数据库表。


阅读 217

收藏
2020-11-19

共1个答案

小编典典

如果使用Hibernate,则注释字段本身(如@Embedded)还是注释引用的类(如@Embeddable)都没有关系。使Hibernate确定类型至少需要两者之一。

在Hibernate文档中有一个(隐式的)声明,请看这里:http : //docs.jboss.org/hibernate/core/3.6/reference/en-
US/html/mapping.html#mapping-
声明组件

它说:

Person实体具有两个组件属性,homeAddress和bornIn。homeAddress属性尚未被注释,但是Hibernate通过在Address类中查找@Embeddable注释将猜测它是一个持久性组件。

2020-11-19