Hibernate之关联关系映射(一对一主键映射和一对一外键映射)
2017-03-22 15:45
381 查看
1:Hibernate的关联关系映射的一对一外键映射:
1.1:第一首先引包,省略
1.2:第二创建实体类:
这里使用用户信息和身份证信息的关系,用户的主键编号既可以做身份证信息的主键又可以做身份证信息的外键,这里先做外键。
创建User.java:
用户和身份证一对一的关联关系映射
private IdCart idCart;
IdCart.java:
身份证和用户,一对一的关系
private User user;
View Code
1.3:创建好实体类,就可以开始配置映射关系了:
User.hbm.xml:
<one-to-one name="idCart" class="IdCart"></one-to-one>
IdCart.hbm.xml:
<!--
(1)一对一映射,有外键方
(2)特殊的多对一映射,多了一个外键,设置主键唯一性
(3)cascade="save-update"级联保存
(4)用户表的主键做身份证信息的外键
(5)unique="true"给外键字段添加唯一约束
-->
<many-to-one cascade="save-update" unique="true" name="user" column="userId" class="User">
</many-to-one>
1.4:最后就可以配置Hibernate.cfg.xml配置了。
1.5:最后测试,既可以完成对一对一外键映射的使用和学习:
2:Hibernate的关联关系映射的一对一主键映射:
2.1:第一步引包省略
2.2:第二步,创建实体类,和上面的实体类的区别就是在身份证实体类表里面加了一个成员变量
private int id;//用户表的主键做身份证表的主键
2.3:第三步配置映射文件,这里修改的主要是身份证的映射文件,修改如下所示:
User.hbm.xml:主要是包的改动
<hibernate-mapping package="com.bie.domain"></hibernate-mapping>
IdCart.hbm.xml:这个改动略大哦
<!-- 主键映射 -->
<id name="id" column="id">
<generator class="foreign">
<param name="property">user</param>
</generator>
</id>
<one-to-one name="user" constrained="true" class="User"></one-to-one>
Hibernate的关联关系的映射搞清楚如何映射会使用即可,这里LZ记录方便为了自行脑补~~~
1.1:第一首先引包,省略
1.2:第二创建实体类:
这里使用用户信息和身份证信息的关系,用户的主键编号既可以做身份证信息的主键又可以做身份证信息的外键,这里先做外键。
创建User.java:
用户和身份证一对一的关联关系映射
private IdCart idCart;
IdCart.java:
身份证和用户,一对一的关系
private User user;
package com.bie.bean; /** * @author BieHongLi * @version 创建时间:2017年3月22日 下午2:07:09 * 用户身份证信息的实体类 */ public class IdCart { private String cartNum;//身份证号,主键,对象唯一标识 private String place; //身份证和用户,一对一的关系 private User user; public String getCartNum() { return cartNum; } public void setCartNum(String cartNum) { this.cartNum = cartNum; } public String getPlace() { return place; } public void setPlace(String place) { this.place = place; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } @Override public String toString() { return "IdCart [cartNum=" + cartNum + ", place=" + place + ", user=" + user + "]"; } }
View Code
1.3:创建好实体类,就可以开始配置映射关系了:
User.hbm.xml:
<one-to-one name="idCart" class="IdCart"></one-to-one>
IdCart.hbm.xml:
<!--
(1)一对一映射,有外键方
(2)特殊的多对一映射,多了一个外键,设置主键唯一性
(3)cascade="save-update"级联保存
(4)用户表的主键做身份证信息的外键
(5)unique="true"给外键字段添加唯一约束
-->
<many-to-one cascade="save-update" unique="true" name="user" column="userId" class="User">
</many-to-one>
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.bie.bean"> <class name="User" table="user2"> <!-- 主键映射 --> <id name="id" column="id"> <generator class="native"></generator> </id> <!-- 非主键映射 --> <property name="name" column="name" type="string" length="20"></property> <!-- 其他字段映射 --> <!-- 一对一映射,没有主键 --> <one-to-one name="idCart" class="IdCart"></one-to-one> </class> </hibernate-mapping>
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.bie.bean"> <class name="IdCart" table="idCart"> <!-- 主键映射 --> <id name="cartNum" column="cartNum"> <!-- <generator class="native"></generator> --> <!-- 身份证信息自己手动设置更加人性化哦 --> <generator class="assigned"></generator> </id> <!-- 非主键映射 --> <property name="place" column="place" type="string" length="20"></property> <!-- 其他字段映射 --> <!-- (1)一对一映射,有外键方 (2)特殊的多对一映射,多了一个外键,设置主键唯一性 (3)cascade="save-update"级联保存 (4)用户表的主键做身份证信息的外键 (5)unique="true"给外键字段添加唯一约束 --> <many-to-one cascade="save-update" unique="true" name="user" column="userId" class="User"></many-to-one> </class> </hibernate-mapping>
1.4:最后就可以配置Hibernate.cfg.xml配置了。
<!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节点代表一个数据库 --> <session-factory> <!-- 第一部分:数据库连接配置 --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql:///test</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">123456</property> <!-- 第二部分:其他相关配置 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.show_sql">true</property> <!-- <property name="hibernate.format_sql">true</property> --> <property name="hibernate.hbm2ddl.auto">create</property> <!-- 1:每次在创建sessionFactory时执行创建表,当调用sessionFactory的close方法的时候,删除表 #hibernate.hbm2ddl.auto create-drop 2:每次都重新建表,如果已经存在就先删除再创建 #hibernate.hbm2ddl.auto create 3:如果表不存在就创建,表存在就不创建 #hibernate.hbm2ddl.auto update 4:生成环境时候执行验证,当映射文件的内容与数据库表结构不一样的时候就报错 #hibernate.hbm2ddl.auto validate --> <!-- 第三部分,加载映射文件 --> <!-- <mapping resource="com/bie/po/User.hbm.xml"/> --> <!-- 第三部分,加载映射文件,一对一主键和外键的映射的练习 --> <mapping resource="com/bie/bean/User.hbm.xml"/> <mapping resource="com/bie/bean/IdCart.hbm.xml"/> </session-factory> </hibernate-configuration>
1.5:最后测试,既可以完成对一对一外键映射的使用和学习:
package com.bie.test; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.junit.Test; import com.bie.bean.IdCart; import com.bie.bean.User; /** * @author BieHongLi * @version 创建时间:2017年3月22日 下午2:51:34 * */ public class One2One { private static SessionFactory sf = null; static{ sf = new Configuration().configure().buildSessionFactory(); } @Test public void test(){ Session session = sf.openSession(); session.beginTransaction(); //用户信息 User user = new User(); user.setName("张三三"); //身份证信息 IdCart idCart = new IdCart(); idCart.setCartNum("41072519930416****"); idCart.setPlace("深圳市"); //设置用户信息和身份证信息的关系 idCart.setUser(user); //如果设置级联操作,只用保存身份证信息即可 session.save(idCart); session.getTransaction().commit(); session.close(); } }
2:Hibernate的关联关系映射的一对一主键映射:
2.1:第一步引包省略
2.2:第二步,创建实体类,和上面的实体类的区别就是在身份证实体类表里面加了一个成员变量
private int id;//用户表的主键做身份证表的主键
2.3:第三步配置映射文件,这里修改的主要是身份证的映射文件,修改如下所示:
User.hbm.xml:主要是包的改动
<hibernate-mapping package="com.bie.domain"></hibernate-mapping>
IdCart.hbm.xml:这个改动略大哦
<!-- 主键映射 -->
<id name="id" column="id">
<generator class="foreign">
<param name="property">user</param>
</generator>
</id>
<one-to-one name="user" constrained="true" class="User"></one-to-one>
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.bie.domain"> <class name="IdCart" table="idCart"> <!-- 主键映射 --> <id name="id" column="id"> <!-- id节点指定的是主键映射,即id是主键 主键生成方式:foreign即把别的表的主键作为当前表的主键, property(关键字,不能修改)指定引用的对象==》对象的全名com.bie.domain.User==》 对象映射文件com.bie.domain.xml==》表table(id) --> <generator class="foreign"> <param name="property">user</param> </generator> </id> <property name="cartNum" column="cartNum" type="string" length="20"></property> <!-- 非主键映射 --> <property name="place" column="place" type="string" length="20"></property> <!-- 其他字段映射 --> <!-- (1)一对一映射,有外键方 (2)用户表的主键做身份证表的主键 (3)constrained="true"设置外键 --> <one-to-one name="user" constrained="true" class="User"></one-to-one> </class> </hibernate-mapping>
Hibernate的关联关系的映射搞清楚如何映射会使用即可,这里LZ记录方便为了自行脑补~~~
相关文章推荐
- Hibernate之关联关系映射(一对一主键映射和一对一外键映射)
- Hibernate一对一映射(基于外键的映射,基于主键的映射)
- Hibernate 一对一关联映射(主键关联VS唯一外键关联)
- Hibernate之基于主键映射的一对一关联关系
- Hibernate之基于主键映射的一对一关联关系
- Hibernate关联关系映射之一对一(主键关联)
- Hibernate关系映射级别注解(一对一双向外键关联、一对一双向外键联合主键)
- Hibernate_映射_关联关系_一对一映射2_基于外键的方式
- Hibernate_映射_关联关系_一对一映射3_基于主键的方式
- Hibernate学习笔记----基于外键或主键映射的1-1关联关系
- hibernate映射总结详解: 按外键映射一对一关联关系
- Hibernate基于主键和外键的单向一对一的关联映射
- hibernate映射总结详解: 按主键映射一对一关联关系
- 新手上路之Hibernate(四):单向一对一关联映射(主键、唯一外键关联)
- Hibernate之基于外键映射的一对一(1-1)关联关系
- Hibernate之基于外键映射的一对一(1-1)关联关系
- Hibernate 第十讲 表关联关系(一)单项一对一外键关联
- Hibernate 第十讲 表关联关系(四)双向一对一主键关联
- hibernate 关系映射之 主键关联一对一
- Hibernate关系映射(5)_一对一单向联合主键关联