1.一对一:one-to-one
(1)思路:首先Tiny就给大家带来一个一对一的案例,人与身份证的案例。 一人对应一张身份证,一张身份证对应一个人,假如人的身份证掉了,可以再补办一张,如果人不在了,那身份证就没了。所以执行删除操作时,删除卡。人还在,删除人,卡就会没有了。
(2)代码演示:
<1>hibernate的特点:表和实体类相连接,映射关系联系在一起:
A:人的实体类:
package com.zking.entity;
public class User {
private int uid;
private String uname;
private Card card;
public Card getCard() {
return card;
}
public void setCard(Card card) {
this.card = card;
}
public User() {
super();
// TODO Auto-generated constructor stub
}
public User(String uname) {
super();
this.uname = uname;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
}
人的映射:user.hbm.xml
<?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 2017-8-22 14:32:20 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="com.zking.entity.User" table="USER">
<id name="uid" type="int">
<column name="UID" />
<generator class="native" />
</id>
<property name="uname" type="java.lang.String">
<column name="UNAME" />
</property>
<one-to-one name="card" class="com.zking.entity.Card" cascade="all-delete-orphan"></one-to-one>
</class>
</hibernate-mapping>
package com.zking.entity;
public class Card {
private int uid;
private String cnum;
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public Card() {
super();
}
public Card(String cnum) {
super();
this.cnum = cnum;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getCnum() {
return cnum;
}
public void setCnum(String cnum) {
this.cnum = cnum;
}
}
卡的映射:
<?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 2017-8-22 14:32:20 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="com.zking.entity.Card" table="CARD">
<id name="uid" type="int">
<column name="UID" />
<generator class="foreign">
<param name="property">user</param>
</generator>
</id>
<property name="cnum" type="java.lang.String">
<column name="CNUM" />
</property>
<one-to-one name="user" class="com.zking.entity.User"></one-to-one>
</class>
</hibernate-mapping>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>G160628_hibernate02</groupId>
<artifactId>G160628_hibernate02</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>G160628_hibernate02 Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<argLine>-Dfile.encoding=UTF-8</argLine>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0-b07</version>
<scope>provided</scope>
</dependency>
<!-- 加入hibernate依赖 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.10.Final</version>
</dependency>
<!-- Mysql依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.43</version>
</dependency>
</dependencies>
<build>
<finalName>G160628_hibernate02</finalName>
</build>
</project>
package com.zking.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.zking.entity.Card;
import com.zking.entity.User;
public class TestOneToOne {
private SessionFactory sessionFactory;
private Session session;
private Transaction transaction;
//在方法执行之前执行
@Before
public void before(){
//设置配置文件
Configuration configuration=new Configuration
().configure();
//获取sessionFactory
sessionFactory = configuration.buildSessionFactory
();
//获取session
session = sessionFactory.openSession();
//开始事务
transaction = session.beginTransaction();
}
//在方法执行之后调用
@After
public void after(){
//提交事务
transaction.commit();
session.close();
sessionFactory.close();
}
public void testAdd(){
//增加
User user=new User("张三");
Card card=new Card("43110731");
//互设
user.setCard(card);
card.setUser(user);
session.save(user);
session.save(card);
}
public void testGet(){
//查询
User user=session.get(User.class, 1);
System.out.println(user.getCard().getCnum());
}
public void testDelete(){
//删除主表
// User user=session.get(User.class, 2);
// session.delete(user);
//删除从表
Card card=session.get(Card.class, 3);
card.getUser().setCard(null);
session.delete(card);
}
}
好了,到此就一对一的案例就到此结束了,有疑惑的孩纸可以进行交流