默认情况下,定义在实体中的每个字段天然就是持久的;如果不希望保存字段/属性的状态,则必须将字段/属性定义为瞬态的,方法是使用@Transient注释或transient修饰符标记它。
可嵌入对象
可嵌入对象是不具有自己标识的持久对象;它是另一个实体的一部分。例如,我们可以假定Address没有自己的标识,且作为Employee实体的一部分存储。因此,Address是可嵌入对象的候选。
可以如下所示创建可嵌入对象:
@Embeddable public class Address { protected String streetAddr1; protected String streetAddr2; protected String city; protected String state; .. } | 以下是将对象定义为目标实体中的可嵌入对象的方法:
@Entity public class Employee { @Id @GeneratedValue(strategy=GenerationType.AUTO) protected Long id; ... @Embedded protected Address address; ... } | 关系
在一个典型的域模型中,实体是彼此关联的,或者它们相互之间存在着关系。两个实体之间的关系可以是一对一、一对多、多对一和多对多的。这些关系可以分别使用OneToOne、OneToMany、ManyToOne或ManyToMany注释表示。在我们的示例中,Department和Employee实体之间具有双向OneToMany关系。
既然我们在实体中使用了基于字段的访问,我们就在Department实体的关系字段上指定注释,如下所示:
@OneToMany(mappedBy="department") protected Collection<Employee> employees ; | 对于双向关系,必须在关系的另一方指定mappedBy元素(如上),方法是指向拥有此关系的字段或属性的名称。
标准化O-R映射
可以使用Java元数据注释或XML实现实体的O-R映射。EJB3 JPA定义了多种用于O-R映射的注释,例如Table、SecondaryTable、Column、JoinColumn和PrimaryKeyJoinColumn。请参阅EJB3 JPA规范,以获得关于所有注释的信息。
在我们的示例中,可以使用Table注释定义实体被映射到的表,如下所示:
@Table(name="DEPT") public class Department implements Serializable { |
EJB3 JPA严重依赖于默认设置,因此如果未定义表映射,则持久性提供程序会假定此实体被映射到与实体类同名的表(在我们的示例中是DEPARTMENT)。如果实体被映射到多个表,则可以使用SecondaryTable注释。
上一页 [1] [2] [3] [4] [5] [6] 下一页
 【责编:Youping】 |