我试图 忽略 了@Embedded注释,并且仍然领域已经嵌入在表中。我找不到任何能说明@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。
我的配置:
JPA规范说:
http://docs.oracle.com/javaee/7/api/javax/persistence/Embedded.html
@javax.persistence.Embedded 指定实体的持久字段或属性,其值是可嵌入类的实例。必须将embeddable类注释为Embeddable。
@javax.persistence.Embedded
指定实体的持久字段或属性,其值是可嵌入类的实例。必须将embeddable类注释为Embeddable。
http://docs.oracle.com/javaee/7/api/javax/persistence/Embeddable.html
@javax.persistence.Embeddable 指定一个类,其实例存储为拥有实体的固有部分并共享该实体的标识。嵌入对象的每个持久属性或字段都映射到该实体的数据库表。
@javax.persistence.Embeddable
指定一个类,其实例存储为拥有实体的固有部分并共享该实体的标识。嵌入对象的每个持久属性或字段都映射到该实体的数据库表。
如果使用Hibernate,则注释字段本身(如@Embedded)还是注释引用的类(如@Embeddable)都没有关系。使Hibernate确定类型至少需要两者之一。
@Embeddable
在Hibernate文档中有一个(隐式的)声明,请看这里:http : //docs.jboss.org/hibernate/core/3.6/reference/en- US/html/mapping.html#mapping- 声明组件
它说:
Person实体具有两个组件属性,homeAddress和bornIn。homeAddress属性尚未被注释,但是Hibernate通过在Address类中查找@Embeddable注释将猜测它是一个持久性组件。