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 );}}