JPA 双向一对一联系关系(@OneToOne)
JPA 双向一对一关联(@OneToOne)
通过上一节配置的映射,只能通过实体CustomerEO对象获得AddressEO对象,是单向关联。若要使AddressEO对象获得CustomerEO对象,需要在AddressEO中增加对CustomerEO对象的引用。
通过上一节配置的映射,只能通过实体CustomerEO对象获得AddressEO对象,是单向关联。若要使AddressEO对象获得CustomerEO对象,需要在AddressEO中增加对CustomerEO对象的引用。
实体类:Customer_2.java package 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 { @Version private Long version; @Id @GeneratedValue private Long id;//客户ID @Column public String name;//客户名称 //onetoone @OneToOne(cascade={CascadeType.ALL}) @JoinColumn(name="address_id") public Address_2 address; public Customer_2(){ } //-----------------可省get,set-------------- }
实体类:Address_2.java package 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 { @Version private Long version;//version @Id @GeneratedValue private Long id;//id public 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.java package 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 one private 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 ); } }