JPA学习---第十节:JPA中的一对一双向关联
2024-08-24 16:28:32
1、创建实体类,代码如下:
代码清单1:
package learn.jpa.entity; 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; @Entity
public class Person { private int id;
private String name;
private IDCard idcard; public Person(){ } public Person(String name){
this.name = name;
} @OneToOne(optional=false,cascade=CascadeType.ALL)
@JoinColumn(name="idcard_id")
public IDCard getIdcard() {
return idcard;
}
public void setIdcard(IDCard idcard) {
this.idcard = idcard;
}
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
} @Column(length=10,nullable=false)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
代码清单2:
package learn.jpa.entity; import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne; @Entity
public class IDCard { private int id;
private String cardno;
private Person person; public IDCard(){ } public IDCard(String cardno){
this.cardno = cardno;
} @OneToOne(mappedBy="idcard",cascade={CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REFRESH},
optional=false)
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
} @Column(length=18, nullable=false)
public String getCardno() {
return cardno;
}
public void setCardno(String cardno) {
this.cardno = cardno;
} }
2、测试代码:
package learn.jpa.test; import static org.junit.Assert.*; import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence; import learn.jpa.entity.IDCard;
import learn.jpa.entity.Person; import org.junit.Test; public class OneToOneTest { /**
* 测试数据库是否可以生成表
*/
@Test
public void test() {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("learn_jpa");
factory.close();
} @Test
public void save(){
EntityManagerFactory factory = Persistence.createEntityManagerFactory("learn_jpa");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin(); // 开启事务 Person person = new Person("hwl");
IDCard idcard = new IDCard("435034189809170123");
idcard.setPerson(person);
person.setIdcard(idcard);
em.persist(person);
em.getTransaction().commit();
em.close();
factory.close();
}
}
最新文章
- 简单的JavaScript互斥锁
- float包裹性与破坏性及清除浮动几种方法
- 大话设计模式C++版——原则和引言
- glusterFS的常用命令 (转)
- JavaScript 中有关数组对象的方法
- IT男的”幸福”生活";续6
- IIS7 .NET Runtime version 2.0.50727.5420 - 执行引擎错误(000007FEE77AAF0E) (80131506)
- eclipse启动tomcat错误:A Java Exception has occurred(转)
- 通过xib加载textfield的时候 发生 this class is not key value coding-compliant for the key textField. 情况怎么解决
- STL 自学
- 【原】EF简单使用
- Ibatis 3.0 之前使用的都是2.0 3.0与2.0的内容有很大的不同
- 定义正则new RegExp('abcd')
- idea创建多模块springboot项目
- php后台对接ios,安卓,API接口设计和实践完全攻略,涨薪必备技能
- 【bzoj5004】开锁魔法II 组合数学+概率dp
- 使用textutil进行文件格式转换
- Linux command line exercises for NGS data processing
- ubuntu samba
- Redis客户端基本命令