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

Hon*_*dek 11 java annotations jpa java-ee

我试图忽略@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;
}
Run Code Online (Sandbox Code Playgroud)

始终生成相同的表

person
    name
    city
    street
Run Code Online (Sandbox Code Playgroud)

即使我没有说明@Embedded.


我的配置:

  • JBoss EAP 6.4.0
  • 冬眠-JPA-2.0-API-1.0.1.Final-红帽-3.jar

JPA规范说:

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

@javax.persistence.Embedded

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

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

@javax.persistence.Embeddable

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

Kev*_*ers 4

在使用 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 注解来猜测它是一个持久化组件。