JPA开发总结<四>--一对一双向关联
2015-01-03 19:26
363 查看
整理完了一对多的关联关系,下面咱们来看看一对一的关联配置情况,重点还是在于分清楚关系维护方和关系被维护方,然后在具体操作,在个就是cascade=CascadeType的维护方式,没必要的级联尽量不要,否则会造成不必要的结果。
在一对一中的例子中,我们分析人和身份证号的关系,一个人只能有一个身份证号,而且伴随着人死亡而失效,至于人是否出生就有身份证号我们不深究,这里理解为不是,无关影响。那具体操作看代码:
在一对一中的例子中,我们分析人和身份证号的关系,一个人只能有一个身份证号,而且伴随着人死亡而失效,至于人是否出生就有身份证号我们不深究,这里理解为不是,无关影响。那具体操作看代码:
定义人对象类,让身份证号做被维护者:
/** * JPA双向一对一关联,Person作为关系的维护端 */ @Entity @Table(name="t_people") public class People { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Integer id; @Column(length=20,nullable=false) private String name; /** * 在关系的维护端定义外键,optional为false表示不能为空 */ @OneToOne(cascade=CascadeType.ALL,optional=false) private IDCard idCard; public People() { } /**方便实例化对象 **/ public People(String name) { this.name = name; } <!--方法省略。。。 --> }
身份证号代码如下:
/** * JPA双向一对一关联,IDCard作为关系的被维护端 */ @Entity @Table(name="t_idcard") public class IDCard { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Integer id; @Column(length=18,nullable=false) private String cardNo; /** * mappedBy出现的类即为关系的被维护端 * 因为在Person端指定了IDCard不允许为空,即外键不能为空,所以IDCard必然会有Person,所以不用再指定optional * @return */ @OneToOne(mappedBy="idCard",cascade={CascadeType.MERGE,CascadeType.PERSIST,CascadeType.REFRESH}) private People people; public IDCard() { } public IDCard(String cardNo) { this.cardNo = cardNo; } <!-- 方法省略。。。--> }
测试代码:
public class OneToOne { 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 savePeople(){ em.getTransaction().begin(); People p = new People("zebra"); IDCard id = new IDCard("12345678"); p.setIdCard(id); //因为对Person设置了级联保存,所以不需要对IDCard进行保存 em.persist(p); em.getTransaction().commit(); em.close(); factory.close(); } }代码很简单,不做太多说明。。
相关文章推荐
- JPA开发总结<三>--一对多双向关联
- JPA开发总结<五>--多对多双向关联
- JPA开发总结<一>
- JPA开发总结<二>--基本操作+JPQL查询
- JPA开发总结<七>--Bug总结
- JPA开发总结<六>--联合主键
- Android开发工具——ADB(Android Debug Bridge) <四>Device端
- Java总结<四>集合框架
- iOS开发 两个视图之间值传递的常用方法<四>
- 【Qt编程】基于Qt的词典开发系列<四>--无边框窗口的缩放与拖动
- ASP.NET MVC (Razor)开发 <<周报与绩效考核系统>> 总结与分享
- Hadoop学习<四>--HDFS的RPC通信原理总结
- <杂谈1002>HTML作为GUI前段,Java/NDK作为业务后端开发方式总结
- &lt;&lt;高效程序员的45个习惯-敏捷开发修炼之道&gt;&gt;总结
- android WebView开发总结<续>
- 实时开发框架Meteor API解读系列<四>Server connections
- 在线支付开发流程总结<包括客户端与服务端>
- 友善官方<<Mini2440 Linux移植开发实战指南>>问题总结
- 友善官方<<Mini2440 Linux移植开发实战指南>>问题总结
- 微服务开发架构——Spring Cloud常见问题与总结<四>Spring Cloud 各组件配置属性