Embedded Objects

@Embedded Objects

Java 持久化规范允许你插入非实体的Java对象在实体组件中并且映射的嵌入对象属性值到实本表中的栏位.这些对象没有任何标识并且被包含的实体组件类所专有.@EmbeddedId主键的规则非常的简单如同前面的例子.我们首先定义一个内部对象:

package com.titan.domain;

 

import javax.persistence.*;

 

@Embeddable

public class Address implements java.io.Serializable {

   private String street;

   private String city;

   private String state;

 

   public String getStreet( ) { return street; }

   public void setStreet(String street) { this.street = street; }

 

   public String getCity( ) { return city; }

   public void setCity(String city) { this.city = city; }

 

   public String getState( ) { return state; }

   public void setState(String state) { this.state = state; }

}

内部的Address类有@Column映射定义在里面.其次,使用@javax.persistence.Embedded注释在Customer组件类内的嵌入实例Address,类:

package javax.persistence;

 

public @interface Embedded {}

同样的@EmbeddedId,@Embedded注释能够被联合同@AttributeOverrides注释一同使用如果你想覆盖指定嵌入类的信息.下面的例子显示如果覆盖.如果你不想覆.省去@AttributeOverrides注释.

package com.titan.domain;

 

import javax.persistence.*;

 

@Entity

@Table(name="CUSTOMER_TABLE")

 

public class Customer implements java.io.Serializable {

   private long id;

   private String firstName;

   private String lastName;

   private Address address;

 

...

@Embedded

   @AttributeOverrides({

      @AttributeOverride

(name="street",

column=@Column(name="CUST_STREET")),

      @AttributeOverride(name="city", column=@Column(name="CUST_CITY")),

      @AttributeOverride(name="state", column=@Column(name="CUST_STATE"))

   })

   public Address getAddress( ) {

      return address;

   }

...

}

在本例中,我们映射Address类属性到Customer_table表中的栏位.如果你不想指定@Embedded注释和Address类是序列化的,那么持久化提供者假定它是@Lob类型与序列化的字节流到Customer_table 表中的栏位.

看一下XML映射文件:

<entity-mappings>

<embeddable class="com.titan.domain.Address" access-type="PROPERTY"/>

   <entity class="com.titan.domain.Customer" access="PROPERTY">

      <attributes>

         <id name="id"/>

         <embedded name="address">

         <attribute-override name="street">

               <column name="CUST_STREET"/>

            </attribute-override>

            <attribute-override name="city">

               <column name="CUST_CITY"/>

            </attribute-override>

            <attribute-override name="state">

               <column name="CUST_STATE"/>

            </attribute-override>

         </embedded>

      </attributes>

   </entity>

</entity-mappings>

这个看起来非常准确的<embedded-id>映射,除了映射一个指定的属性使用<embedded>元素,其它的都相同.

 

简而言之,都是关于基本的属性映射.在下一章中,我们将讨论怎样映射复杂的关在多个实体组件之间.

 

from:http://hi.baidu.com/vsandjava/blog/item/9e6da7ecd0dc1d3d2797916d.html

你可能感兴趣的:(xml,Blog,Access)