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.
我的配置:
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指定一个类,其实例存储为拥有实体的内在部分并共享实体的标识.嵌入对象的每个持久属性或字段都映射到实体的数据库表.
在使用 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 注解来猜测它是一个持久化组件。