对于一对一关联关系,代码编写者可以根据自已的意愿或业务需要选择任意一方作为关系维护方,我这里选择的人员信息详细作为关系维护方
package org.lxh.info;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.OneToOne;
@Entity
public class UserDetails {
private Integer id;
private String introduce;
private String cardNum;
private User user;
@Id @GeneratedValue
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Lob
public String getIntroduce() {
return introduce;
}
public void setIntroduce(String introduce) {
this.introduce = introduce;
}
public String getCardNum() {
return cardNum;
}
public void setCardNum(String cardNum) {
this.cardNum = cardNum;
}
@OneToOne(mappedBy="userDetails",cascade=CascadeType.MERGE)
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
到这里实体就编写好了
2 一对一的保存操作
@org.junit.Test
public void testInsert() {
EntityManager em=null;
EntityTransaction tx=null;
try{
em=JpaUtil.getEntityManager();
tx=em.getTransaction();
tx.begin();
User u=new User();
u.setBirthday(new Date());
u.setName("潘玮柏");
u.setSex(Sex.MAN);
UserDetails detail=new UserDetails();
detail.setCardNum("562923");
detail.setIntroduce("暂无");
detail.setUser(u);
u.setUserDetails(detail);
em.persist(u);
tx.commit();
}catch(Exception e){
e.printStackTrace();
}finally{
if(em!=null){
em.close();
}
}
}
打印出来的sql语句如下:
Hibernate:
insert
into
UserDetails
(cardNum, introduce)
values
(?, ?)
Hibernate:
insert
into
m_users
(birthday, name, sex, detailsId)
values
(?, ?, ?, ?)
是不是很简单呢