读书人

JPA 双向一对一联系关系(@OneToOne)

发布时间: 2012-09-19 13:43:53 作者: rapoo

JPA 双向一对一关联(@OneToOne)
通过上一节配置的映射,只能通过实体CustomerEO对象获得AddressEO对象,是单向关联。若要使AddressEO对象获得CustomerEO对象,需要在AddressEO中增加对CustomerEO对象的引用。

    实体类:Customer_2.javapackage com.demo.bean.onetoone2;import javax.persistence.CascadeType;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.OneToOne;import javax.persistence.Table;import javax.persistence.Version;@Entity@Table(name = "t_Customer_2")public class Customer_2 {@Versionprivate Long version;@Id@GeneratedValueprivate Long id;//客户ID@Columnpublic String name;//客户名称//onetoone@OneToOne(cascade={CascadeType.ALL})@JoinColumn(name="address_id")public Address_2 address;public Customer_2(){}//-----------------可省get,set--------------}

     实体类:Address_2.javapackage com.demo.bean.onetoone2;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.OneToOne;import javax.persistence.Table;import javax.persistence.Version;/** * entity Address_2 * @author ALEX * */@Entity@Table(name="t_address_2")public class Address_2 {@Versionprivate Long version;//version@Id@GeneratedValueprivate Long id;//idpublic String province;//省份public String city;//城市public String postcode;//邮编public String detail;//详细地址/** *  * 也能够通过AddressEO获得CustomerEO实体 * */[color=blue]@OneToOne(mappedBy="address")[/color]public Customer_2 customer;//----------get,set可省------------}

   测试类TestJPA.javapackage com.demo.bean.onetoone2;import java.util.List;import javax.persistence.EntityManager;import javax.persistence.EntityManagerFactory;import javax.persistence.EntityTransaction;import javax.persistence.Persistence;public class TestJPA {/** * 测试jpa注解 * @param args */public static void main(String[] args) {EntityManagerFactory emf = Persistence.createEntityManagerFactory("tpdb");EntityManager em = emf.createEntityManager();EntityTransaction et = em.getTransaction();et.begin();    saveOneToOne(em);    et.commit();        //查询  //通过Customer获得Address    Customer_2 customer = em.find( Customer_2.class, new Long(1));    Address_2 address = customer.getAddress();    System.out.println("cu---ad--"+address.getDetail());      //通过Address获得对应Customer    Address_2 adct = em.find( Address_2.class, new Long(1));    Customer_2 ctad = adct.getCustomer();    System.out.println("ad----ct---"+ctad.getName());    System.out.println("ad---ct--"+ctad.getAddress());  }public static List getAllCustomer(EntityManager em){return em.createQuery("select c from Customer c").getResultList();}public static List getAllAddress(EntityManager em){return em.createQuery("select a from Address a").getResultList();}//双向one to oneprivate static void saveOneToOne(EntityManager em){Customer_2 ct = new Customer_2();ct.setName("小q");Address_2 ad = new Address_2();ad.setProvince("北京省");ad.setCity("朝阳市");ad.setPostcode("254600");ad.setDetail("天心区");    ct.setAddress( ad );    ad.setCustomer( ct );    em.persist( ct );}}

读书人网 >软件架构设计

热点推荐