一对一
测试
package com.lj.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.lj.entity.Card;
import com.lj.entity.Users;
public class TestOneToOne {//一对一
private Session session;
private Transaction transaction;
private SessionFactory factory;
//在测试方法之前执行的
@Before
public void before() {
//获取hibernate配置文件对象
Configuration configuration=new Configuration().configure();
factory = configuration.buildSessionFactory();
session = factory.openSession();
transaction = session.beginTransaction();
}
@Test
public void test() {
/*Users u=session.get(Users.class,1);
System.out.println(u.getCard().getCnumber());*/
//添加数据 用户信息和卡的信息 添加之后一一对应
/*Users u=new Users("admin1");
Card c=new Card("431111111111111");
//相互设置 互设 添加关系(设置关系)
u.setCard(c);
c.setUsers(u);
session.save(u);//级联操作(保存用户时同时保存卡)
*/ //session.save(c);
//找到一个人同时找到这个人的卡
/*Users u=session.get(Users.class, 1);
System.out.println(u.getCard());*/
//查询一张卡的同时查询该卡的用户
/*Card c=session.get(Card.class, 1);
System.out.println(c.getUsers().getUname());*/
//删除一个用户同时删除用户的卡
/*Users u=session.get(Users.class, 1);
session.delete(u);//级联操作 删除卡*/
//删除一张卡
/*Card c=session.get(Card.class, 4);
//断绝关系 --老大与小弟 小弟被打 老大丢脸 得先经过老大同意 不然后果很严重
//c.getUsers().setCard(null);
//将级联的对象踢出session的管理范围 小弟
Users u=c.getUsers();
session.evict(u);
session.delete(c);*/
//给用户添加一张新的卡
/*Users u=session.get(Users.class, 2);
Card c=new Card("11111111111111");
u.setCard(c);
c.setUsers(u);
session.save(c);*/
/*//给老卡添加一个新人 no
Card c=session.get(Card.class, 8);
Users u=new Users("aaa");
u.setCard(c);
c.setUsers(u);
session.save(u);*/
/*Card c=session.get(Card.class, 5);
c.getUsers().setUname("小强");
session.update(c);
*/
//删除一个用户不删除卡
Users u=session.get(Users.class, 5);
u.setCard(null);
session.delete(u);
}
//在测试方法之后执行的方法 shift+tab
@After
public void after() {
//提交事务
transaction.commit();
//关闭session
session.close();
//关闭session工厂
factory.close();
}
}
实体类映射文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2019-7-8 10:19:49 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="com.lj.entity.Users" table="USERS">
<id name="uid" type="java.lang.Integer">
<column name="UID" />
<generator class="native" />
</id>
<property name="uname" type="java.lang.String">
<column name="UNAME" />
</property>
<!-- 用户对应的卡的信息
name:实体类中一对一的属性名称
cascade:级联 谁为主 就级联从 用户级联卡
-->
<one-to-one name="card" class="com.lj.entity.Card" cascade="all"></one-to-one>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2019-7-8 10:19:49 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="com.lj.entity.Card" table="CARD">
<id name="cid" type="java.lang.Integer">
<column name="CID" />
<!-- 用用户的主键作为 卡的id的外键 -->
<generator class="foreign">
<param name="property">users</param>
</generator>
</id>
<property name="cnumber" type="java.lang.String">
<column name="CNUMBER" />
</property>
<one-to-one name="users" class="com.lj.entity.Users"></one-to-one>
</class>
</hibernate-mapping>
实体类
package com.lj.entity;
public class Users {
private Integer uid;
private String uname;
private Card card;//该用户的卡的信息
public Users(String uname) {
super();
this.uname = uname;
}
public Users() {
super();
}
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public Card getCard() {
return card;
}
public void setCard(Card card) {
this.card = card;
}
}
package com.lj.entity;
public class Card {
private Integer cid;
private String cnumber;
private Users users;//用户信息
public Integer getCid() {
return cid;
}
public void setCid(Integer cid) {
this.cid = cid;
}
public String getCnumber() {
return cnumber;
}
public void setCnumber(String cnumber) {
this.cnumber = cnumber;
}
public Card(String cnumber) {
super();
this.cnumber = cnumber;
}
public Card() {
super();
}
public Users getUsers() {
return users;
}
public void setUsers(Users users) {
this.users = users;
}
}