Hibernate中的关联关系一对一映射
2016-11-28 22:10
465 查看
1:People
package com.hibernate1.entity;
public class People {
private Integer id;
private String name;
private String sex;
private IdCard idCard;
public People() {
super();
// TODO Auto-generated constructor stub
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public IdCard getIdCard() {
return idCard;
}
public void setIdCard(IdCard idCard) {
this.idCard = idCard;
}
@Override
public String toString() {
return "People [id=" + id + ", name=" + name + ", sex=" + sex
+ ", idCard=" + idCard + "]";
}
}
2:IdCard
package com.hibernate1.entity;
public class IdCard {
private Integer id;
private String cardNum;
private People people;
public IdCard() {
super();
// TODO Auto-generated constructor stub
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCardNum() {
return cardNum;
}
public void setCardNum(String cardNum) {
this.cardNum = cardNum;
}
public People getPeople() {
return people;
}
public void setPeople(People people) {
this.people = people;
}
@Override
public String toString() {
return "IdCard [id=" + id + ", cardNum=" + cardNum + ", people="
+ people + "]";
}
}
3:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 配置连接数据库的基本信息 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://127.0.0.1:3306/mydatabase</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<!-- 配置HiberNate的基本信息 -->
<!-- HiberNate使用的数据库方言 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 操作是是否在控制台显示 -->
<property name="show_sql">true</property>
<!--是否对进行格式化 -->
<property name="format_sql">true</property>
<!--指定自定生成数据表的策略 -->
<property name="hbm2ddl.auto">update</property>
<mapping resource="com/hibernate1/study/Student.hbm.xml"/>
<mapping resource="com/hibernate1/study/Classes.hbm.xml"/>
<mapping resource="com/hibernate1/entity/People.hbm.xml"/>
<mapping resource="com/hibernate1/entity/IdCard.hbm.xml"/>
<!-- <mapping resource="com/hibernate1/util/Developer.hbm.xml"/>
<mapping resource="com/hibernate1/util/Project.hbm.xml"/> -->
<!-- <mapping resource="com/hibernate1/entity/News.hbm.xml"/>
<mapping resource="com/hibernate1/entity/Customer.hbm.xml"/>
<mapping resource="com/hibernate1/entity/Order.hbm.xml"/>
<mapping resource="com/hibernate1/study/Customer.hbm.xml"/>
<mapping resource="com/hibernate1/study/Order.hbm.xml"/>-->
<!--配置使用的二级缓存 -->
<!-- <property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.internal.NoCachingRegionFactory</property>
<cache usage="read-write" class="com.study.hello.News"/> -->
</session-factory>
</hibernate-configuration>
4:People.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!--对象映射文件-->
<class name="com.hibernate1.entity.People" table="people">
<id name="id" type="java.lang.Integer">
<column name="id"/>
<!--指定主键的生成方式 -->
<generator class="native"></generator>
</id>
<property name="name" type="java.lang.String" column="name"></property>
<property name="sex" type="java.lang.String" column="sex"></property>
<!-- fetch默认值为join的方式,采用左外连接的方式查询;当fetch=‘select’的时候,默认会发送两条SQL -->
<!-- 一对一的延迟加载的方式是将 constrained设置为true,然后将被延迟加载的一方的class中的lazy属性设置为true(默认值为true)-->
<one-to-one name="idCard" class="com.hibernate1.entity.IdCard" cascade="all"></one-to-one>
</class>
</hibernate-mapping>
5:IdCard.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!--对象映射文件-->
<class name="com.hibernate1.entity.IdCard" table="cards">
<id name="id" type="java.lang.Integer">
<column name="id"/>
<!--指定主键的生成方式 -->
<generator class="native"></generator>
</id>
<property name="cardNum" type="java.lang.String" column="card_num"></property>
<one-to-one name="people" class="com.hibernate1.entity.People"></one-to-one>
</class>
</hibernate-mapping>
6:Save
package com.hibernate1.entity;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.hibernate1.util.HibernateUtil;
public class Test1 {
public static void main(String[] args) {
/*// 1:下面的方法默认加载hibernate.cfg.xml文件
Configuration configuare = new Configuration().configure();
// 2:创建sessionFactory
SessionFactory ssssionFactory = configuare.buildSessionFactory();
// 3:创建session
Session session =ssssionFactory.openSession();*/
HibernateUtil hibernateUtil=new HibernateUtil();
Session session=hibernateUtil.getSession();
// 4:开始事务,Hibernate必须显式的手动提交事务
Transaction transaction = session.beginTransaction();
// 5:保存
People people = new People();
people.setName("AAA");
people.setSex("男");
IdCard idCard = new IdCard();
idCard.setCardNum("889900");
idCard.setPeople(people);
people.setIdCard(idCard);
session.save(people);
// 6:提交事务
transaction.commit();
// 7:关闭session
hibernateUtil.closeSession();
//8:关闭sessionFactory
hibernateUtil.closeSessionFactory();
}
}
package com.hibernate1.entity;
public class People {
private Integer id;
private String name;
private String sex;
private IdCard idCard;
public People() {
super();
// TODO Auto-generated constructor stub
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public IdCard getIdCard() {
return idCard;
}
public void setIdCard(IdCard idCard) {
this.idCard = idCard;
}
@Override
public String toString() {
return "People [id=" + id + ", name=" + name + ", sex=" + sex
+ ", idCard=" + idCard + "]";
}
}
2:IdCard
package com.hibernate1.entity;
public class IdCard {
private Integer id;
private String cardNum;
private People people;
public IdCard() {
super();
// TODO Auto-generated constructor stub
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCardNum() {
return cardNum;
}
public void setCardNum(String cardNum) {
this.cardNum = cardNum;
}
public People getPeople() {
return people;
}
public void setPeople(People people) {
this.people = people;
}
@Override
public String toString() {
return "IdCard [id=" + id + ", cardNum=" + cardNum + ", people="
+ people + "]";
}
}
3:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 配置连接数据库的基本信息 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://127.0.0.1:3306/mydatabase</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<!-- 配置HiberNate的基本信息 -->
<!-- HiberNate使用的数据库方言 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 操作是是否在控制台显示 -->
<property name="show_sql">true</property>
<!--是否对进行格式化 -->
<property name="format_sql">true</property>
<!--指定自定生成数据表的策略 -->
<property name="hbm2ddl.auto">update</property>
<mapping resource="com/hibernate1/study/Student.hbm.xml"/>
<mapping resource="com/hibernate1/study/Classes.hbm.xml"/>
<mapping resource="com/hibernate1/entity/People.hbm.xml"/>
<mapping resource="com/hibernate1/entity/IdCard.hbm.xml"/>
<!-- <mapping resource="com/hibernate1/util/Developer.hbm.xml"/>
<mapping resource="com/hibernate1/util/Project.hbm.xml"/> -->
<!-- <mapping resource="com/hibernate1/entity/News.hbm.xml"/>
<mapping resource="com/hibernate1/entity/Customer.hbm.xml"/>
<mapping resource="com/hibernate1/entity/Order.hbm.xml"/>
<mapping resource="com/hibernate1/study/Customer.hbm.xml"/>
<mapping resource="com/hibernate1/study/Order.hbm.xml"/>-->
<!--配置使用的二级缓存 -->
<!-- <property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.internal.NoCachingRegionFactory</property>
<cache usage="read-write" class="com.study.hello.News"/> -->
</session-factory>
</hibernate-configuration>
4:People.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!--对象映射文件-->
<class name="com.hibernate1.entity.People" table="people">
<id name="id" type="java.lang.Integer">
<column name="id"/>
<!--指定主键的生成方式 -->
<generator class="native"></generator>
</id>
<property name="name" type="java.lang.String" column="name"></property>
<property name="sex" type="java.lang.String" column="sex"></property>
<!-- fetch默认值为join的方式,采用左外连接的方式查询;当fetch=‘select’的时候,默认会发送两条SQL -->
<!-- 一对一的延迟加载的方式是将 constrained设置为true,然后将被延迟加载的一方的class中的lazy属性设置为true(默认值为true)-->
<one-to-one name="idCard" class="com.hibernate1.entity.IdCard" cascade="all"></one-to-one>
</class>
</hibernate-mapping>
5:IdCard.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!--对象映射文件-->
<class name="com.hibernate1.entity.IdCard" table="cards">
<id name="id" type="java.lang.Integer">
<column name="id"/>
<!--指定主键的生成方式 -->
<generator class="native"></generator>
</id>
<property name="cardNum" type="java.lang.String" column="card_num"></property>
<one-to-one name="people" class="com.hibernate1.entity.People"></one-to-one>
</class>
</hibernate-mapping>
6:Save
package com.hibernate1.entity;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.hibernate1.util.HibernateUtil;
public class Test1 {
public static void main(String[] args) {
/*// 1:下面的方法默认加载hibernate.cfg.xml文件
Configuration configuare = new Configuration().configure();
// 2:创建sessionFactory
SessionFactory ssssionFactory = configuare.buildSessionFactory();
// 3:创建session
Session session =ssssionFactory.openSession();*/
HibernateUtil hibernateUtil=new HibernateUtil();
Session session=hibernateUtil.getSession();
// 4:开始事务,Hibernate必须显式的手动提交事务
Transaction transaction = session.beginTransaction();
// 5:保存
People people = new People();
people.setName("AAA");
people.setSex("男");
IdCard idCard = new IdCard();
idCard.setCardNum("889900");
idCard.setPeople(people);
people.setIdCard(idCard);
session.save(people);
// 6:提交事务
transaction.commit();
// 7:关闭session
hibernateUtil.closeSession();
//8:关闭sessionFactory
hibernateUtil.closeSessionFactory();
}
}
相关文章推荐
- Hibernate关联关系映射-----基于连接表的单向一对一映射
- Hibernate映射一对一关联关系
- Hibernate之关联关系映射(一对一主键映射和一对一外键映射)
- Hibernate_映射_关联关系_一对一映射1__映射基础
- Hibernate_映射_关联关系_一对一映射3_基于主键的方式
- Hibernate_映射_关联关系_一对一映射2_基于外键的方式
- hibernate 第七章 映射一对一 多对多关联关系
- Hibernate之基于主键映射的一对一关联关系
- Hibernate的关联关系注解映射(一对一、一对多、多对一、多对多、自连接)
- Hibernate关联关系映射-----单向一对一映射配置
- Hibernate之基于主键映射的一对一关联关系
- Hibernate -- 映射实体关联关系(一对一关联关系)
- Hibernate关联关系映射-----单向一对一映射配置
- Hibernate关联关系配置-----双向一对一映射配置
- Hibernate关联关系映射配置(一对多,多对多,一对一)
- Hibernate关联关系配置-----双向一对一映射配置
- Hibernate之基于外键映射的一对一(1-1)关联关系
- Hibernate关联关系映射 一对一 一对多 多对一
- Hibernate的关联关系注解映射(一对一、一对多、多对一、多对多、自连接) 标签: hibernateentity 2016-10-11 16:28 1635人阅读 评论(0) 收藏 举报 分类
- Hibernate之基于外键映射的一对一(1-1)关联关系