我正在从本教程学习JPA .
我对理解以下注释有一些困惑:
@Basic@Embedded可嵌入类型的字段默认为持久性,就像使用@Embedded进行注释一样.
如果embeddable类型的字段默认为持久化,那么为什么我们需要@Embedded注释
Pas*_*ent 51
该@Embeddable注解允许指定一个类,其实例存储为拥有实体的固有部分.此注释没有属性.
@Embeddable
public class EmploymentPeriod {
java.util.Date startDate;
java.util.Date endDate;
...
}
Run Code Online (Sandbox Code Playgroud)
该@Embedded注释用于指定其值是一个可嵌入类的实例实体的持久字段或属性.默认情况下,@Embeddable类中指定的列定义适用于拥有实体的表,但您可以使用@AttributeOverride以下方法覆盖它们:
@Embedded
@AttributeOverrides({
@AttributeOverride(name="startDate", column=@Column(name="EMP_START")),
@AttributeOverride(name="endDate", column=@Column(name="EMP_END"))
})
public EmploymentPeriod getEmploymentPeriod() { ... }
Run Code Online (Sandbox Code Playgroud)
关于可选@Basic注释,您可以使用它来配置获取类型,LAZY并将映射配置为禁止具有该optional属性的空值(对于非基本类型).
@Basic(fetch=LAZY)
protected String getName() { return name; }
Run Code Online (Sandbox Code Playgroud)
您还可以将其放在字段或属性上以明确标记为持久性(用于文档目的).
Jam*_* P. 13
在ORM映射中,对象模型的粒度可以比数据库的粒度更精细.
例如,您可以Person在数据库中创建一条记录,该记录可以进一步分解,以包含对Address模型中对象的引用.这也正是@Embedded和@Embeddable注释进来.他们只是陈述一个地方的关系Entity可以存储为的另一部分.
至于@Basic注释,它是最简单的映射形式,默认情况下应用于原始类型,如int和float及其包装器和枚举.可以在这里获得更多信息:http://docs.jboss.org/hibernate/stable/annotations/reference/en/html/entity.html#entity-mapping-property