首页 > 代码库 > JPA开发总结<六>--联合主键
JPA开发总结<六>--联合主键
联合主键就是将几个字段都作为主键,或者说一个以上主键的都可作为联合主键或者复合主键,开发联合主键实体类对象必须做到三个要求,一是提供一个无参构造函数,二是必须实现序列化串行接口,三是必须重写HashCode和equals方法,参数是复合主键的属性。这里我们的实例用航班做,我们知道航班有起始地,也有终止点,他们有一个共同的航班名,所以可以用联合主键来做表设计,具体看代码。
首先定义航线实体:
/** * 航线实体 */ @Entity @Table(name="t_airline") public class AirLine { @EmbeddedId private AirLinePK id; @Column(length=20,nullable=false) private String name; public AirLine(){} //默认构造函数中引入联合主键参数 public AirLine(String startCity,String endCity,String name) { this.id=new AirLinePK(startCity, endCity); this.name = name; } }<span style="font-family:Microsoft YaHei;font-size:14px;"> </span>
然后定义联合主键实体类:
/** * 复合主键类 * 1.提供一个无参构造函数 * 2.必须实现序列化接口 * 3.必须重写HashCode和equals方法,参数是复合主键的属性 * * Embeddable表示它标识的类是用在别的实体里面 */ @Embeddable public class AirLinePK implements Serializable{ @Column(length=3,nullable=false) private String startCity; @Column(length=3,nullable=false) private String endCity; public AirLinePK() { } public AirLinePK(String startCity, String endCity) { this.startCity = startCity; this.endCity = endCity; } @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; 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; } <!--省略。。注意联合主键要求 --> }<span style="font-family:Microsoft YaHei;font-size:14px;"> </span>
最后是测试类:
public class CompositePK { private static EntityManagerFactory factory; private static EntityManager em; @BeforeClass public static void setUpBeforeClass() throws Exception { factory = Persistence.createEntityManagerFactory("jpatest1"); em = factory.createEntityManager(); } @Test public void save() { em.getTransaction().begin(); //开启事务 AirLine line = new AirLine("PEK", "SHA", "北京飞往上海"); em.persist(line); em.getTransaction().commit(); //提交事务 em.close(); //关闭 factory.close(); //关闭 } }好了,联合主键就搞定了,,还是得多敲代码。
JPA开发总结<六>--联合主键
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。