Many-to-One映射
来源:互联网 发布:lol面具淘宝 编辑:程序博客网 时间:2024/05/18 03:22
举例如下:
1.Group.java
- package edu.study.hibernate;
- public class Group {
- private int id;
- private String name;
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- }
2.User.java
- package edu.study.hibernate;
- public class User {
- private int id;
- private String name;
- private Group group;
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Group getGroup() {
- return group;
- }
- public void setGroup(Group group) {
- this.group = group;
- }
- }
3.Group.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">
- <hibernate-mapping>
- <class name="edu.study.hibernate.Group" table="t_group">
- <id name="id">
- <generator class="native"></generator>
- </id>
- <property name="name"></property>
- </class>
- </hibernate-mapping>
4.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">
- <hibernate-mapping>
- <class name="edu.study.hibernate.User" table="t_user">
- <id name="id">
- <generator class="native"></generator>
- </id>
- <property name="name"></property>
- <many-to-one name="group" column="groupid" cascade="all"></many-to-one>
- </class>
- </hibernate-mapping>
5.hibernate.cfg.xml配置文件
- <!DOCTYPE hibernate-configuration PUBLIC
- "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
- <hibernate-configuration>
- <session-factory >
- <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1/hibernate_many2one</property>
- <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
- <property name="hibernate.connection.username">root</property>
- <property name="hibernate.connection.password">root</property>
- <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
- <property name="hibernate.show_sql">true</property>
- <mapping resource="edu/study/hibernate/User.hbm.xml"/>
- <mapping resource="edu/study/hibernate/Group.hbm.xml"/>
- </session-factory>
- </hibernate-configuration>
6.测试代码
- Group group=new Group();
- group.setName("研发部");
- User u1=new User();
- u1.setName("小黄");
- u1.setGroup(group);
- User u2=new User();
- u2.setName("小张");
- u2.setGroup(group);
- session.save(u1);
- session.save(u2);
如果没使用cascade属性,会抛出TransientObjectException异常,因为Group为transient状态,User为persistent状态,而persistent状态对象不能引用transient状态对象,因此会抛出异常。正确的如下:
- Group group=new Group();
- group.setName("研发部");
- //首先要保存Group
- session.save(group);
- User u1=new User();
- u1.setName("小黄");
- u1.setGroup(group);
- User u2=new User();
- u2.setName("小张");
- u2.setGroup(group);
- //可以正确存储
- session.save(u1);
- session.save(u2);
注意:没有使用cascade属性的前提下,首先存储Group,则Group对象成为了persistent状态,从而当persistent状态的User对象对其引用时,不会抛出异常。
如果采用了级联,即
- <many-to-one name="group" column="groupid" cascade="all"></many-to-one>
cascade属性进行了设置,即使不首先保存Group,也不会抛出异常,并正确存储。
- Group group=new Group();
- group.setName("研发部");
- User u1=new User();
- u1.setName("小黄");
- u1.setGroup(group);
- User u2=new User();
- u2.setName("小张");
- u2.setGroup(group);
- session.save(u1);
- session.save(u2);
因为采用了级联cascade属性,会首先保存Group,所以不会抛出异常。
总结:
(1)多对一映射:会在多的一端(User)加入外键,指向一的一端(Group),外键的定义由column属性决定,如果没有该属性,默认的外键与实体的属性一致。如
- <many-to-one name="group" column="groupid" cascade="all"></many-to-one>
(2)cascade:级联的意思是指定两个对象之间的操作联动关系,对一个对象执行了操作之后,对其指定的级联对象也需要执行相同的操作。
其属性值如下:
all:在所有的情况下都执行级联操作;
none:在所有情况下都不执行级联操作;
save-update:在保存和更新的时候执行级联操作;
delete:在删除的时候执行级联操作。
转自:http://blog.csdn.net/yyywyr/article/details/6656522
- Many-to-One映射
- Many-to-One映射
- Many-to-One映射
- Many-to-One映射
- nhibernate: one-to-many映射
- Hibernate one-to-many / many-to-one关系映射
- Hibernate one-to-many / many-to-one关系映射
- Hibernate one-to-many && many-to-many 的关系映射
- NHibernate的关联映射(one-to-one,one-to-many,many-to-many)以及cascade分析
- NHibernate的关联映射(one-to-one,one-to-many,many-to-many)以及cascade分析
- NHibernate的关联映射(one-to-one,one-to-many,many-to-many)以及cascade分析
- NHibernate的关联映射(one-to-one,one-to-many,many-to-many)以及cascade分析
- NHibernate的关联映射(one-to-one,one-to-many,many-to-many)以及cascade分析
- NHibernate的关联映射(one-to-one,one-to-many,many-to-many)以及cascade分析
- 码农小汪-Hibernate学习4-关联关系映射many-to-one,many-to-one,one-to-many
- NHibernate学习笔记(三):many-to-one/one-to-many/many-to-many关系映射
- many-to-one/one-to-many/many-to-many关系映射 (Hibernate)
- NHibernate学习笔记(三):many-to-one/one-to-many/many-to-many关系映射
- JSP详细篇——Ajax
- WIFI小车记录五:单片机串口通信
- Adding a File to a Run-time Image (Windows CE 5.0)
- 复数类计算
- 如何使用LoadRunner监控Linux与Windows
- Many-to-One映射
- Moodle 中文 API 之 权限管理API
- 一些web前端开发比较有用的框架和组件
- Log4j在Java中的使用
- MemoryCache学习
- Maven 命令
- 送个给迷离恍惚的朋友们
- 织梦的自定义表单实现在线报名、留言等功能。
- windows hook