文章出处:jpa复合主键的使用
AirLinePk复合主键类
package com.ljq.entity; import javax.persistence.Column; import javax.persistence.Embeddable; /** * 使用复合主键要满足的条件 * * 1、要实现序列化 2、提供默认的构造方法 3、实现hashCope * * @author Administrator * */ @SuppressWarnings("serial") @Embeddable //embeddable: 可嵌入的 public class AirLinePk implements java.io.Serializable { @Column(length = 3) private String startCity;// 出发城市 @Column(length = 3) private String endCity;// 抵达城市 public AirLinePk() { super(); } public AirLinePk(String startCity, String endCity) { super(); this.startCity = startCity; this.endCity = endCity; } public String getEndCity() { return endCity; } public void setEndCity(String endCity) { this.endCity = endCity; } public String getStartCity() { return startCity; } public void setStartCity(String startCity) { this.startCity = startCity; } @Override public int hashCode() { final int PRIME = 31; int result = 1; result = PRIME * result + ((endCity == null) ? 0 : endCity.hashCode()); result = PRIME * result + ((startCity == null) ? 0 : startCity.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; final AirLinePk other = (AirLinePk) obj; if (endCity == null) { if (other.endCity != null) return false; } else if (!endCity.equals(other.endCity)) return false; if (startCity == null) { if (other.startCity != null) return false; } else if (!startCity.equals(other.startCity)) return false; return true; } }AirLine实体类
package com.ljq.entity; import javax.persistence.Column; import javax.persistence.EmbeddedId; import javax.persistence.Entity; @SuppressWarnings("serial") @Entity public class AirLine implements java.io.Serializable{ @EmbeddedId private AirLinePk id; @Column(length=20) private String name; public AirLine() { super(); } public AirLine(String startCity,String endCity, String name) { this.id =new AirLinePk(startCity,endCity); this.name = name; } public AirLinePk getId() { return id; } public void setId(AirLinePk id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }PKTest测试类
package com.ljq.test; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import org.junit.Test; import com.ljq.entity.AirLine; import com.ljq.entity.AirLinePk; public class PKTest { @Test public void save() { EntityManagerFactory factory = Persistence.createEntityManagerFactory("ljq"); EntityManager em=factory.createEntityManager(); em.getTransaction().begin(); em.persist(new AirLine("PEK","SHA","北京飞上海")); em.getTransaction().commit(); em.close(); factory.close(); } @Test public void find() { EntityManagerFactory factory = Persistence.createEntityManagerFactory("ljq"); EntityManager em=factory.createEntityManager(); em.getTransaction().begin(); AirLine airLine=em.find(AirLine.class, new AirLinePk("PEK","SHA")); System.out.println(airLine.getName()); em.getTransaction().commit(); em.close(); factory.close(); } @Test public void update() { EntityManagerFactory factory = Persistence.createEntityManagerFactory("ljq"); EntityManager em=factory.createEntityManager(); em.getTransaction().begin(); AirLine airLine=em.getReference(AirLine.class, new AirLinePk("PEK","SHA")); airLine.setName("北京飞上海北京飞上海"); em.merge(airLine); em.getTransaction().commit(); em.close(); factory.close(); } @SuppressWarnings({ "unused", "unchecked" }) @Test public void list() { EntityManagerFactory factory = Persistence.createEntityManagerFactory("ljq"); EntityManager em=factory.createEntityManager(); em.getTransaction().begin(); List<AirLine> airLines=em.createQuery("select o from AirLine o").getResultList(); for(AirLine air:airLines){ System.out.println(air.getName()); } em.getTransaction().commit(); em.close(); factory.close(); } @SuppressWarnings({ "unused", "unchecked" }) @Test public void detele() { EntityManagerFactory factory = Persistence.createEntityManagerFactory("ljq"); EntityManager em=factory.createEntityManager(); em.getTransaction().begin(); em.remove(em.getReference(AirLine.class, new AirLinePk("PEK","SHA"))); em.getTransaction().commit(); em.close(); factory.close(); } /** * 用来判断映射是否成功 * */ @Test public void test() { Persistence.createEntityManagerFactory("ljq"); } }