Hibernate框架二之ManyToOne
来源:互联网 发布:验证码js ajax demo 编辑:程序博客网 时间:2024/05/10 02:35
1、在开发过程中,经常会遇到:一个班级对应多个学生这种一对多的关系,hibernate作为一个持久层框架,是怎么实现这个对象的关联呢?这就是我们这章讨论的重点
2、实例代码在上面有,感兴趣的同学可以到下下来看看,这里我们主要讲解一些配置信息,代码我是配置了Group与User之间的一对多的关系,我主要讲解这个怎么配置
首先应该知道一对多的关联,关联属性应该配置在多的一方,所以这里应该讲关联属性配置在User对象中,首先看看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 package="com.xingyao.model"> <class name="User" table="t_user"> <id name="id" type="java.lang.String"> <generator class="uuid"/> </id> <property name="username" type="java.lang.String"/> <property name="password" type="java.lang.String"/> <property name="createTime" type="java.util.Date"/> <many-to-one name="group" column="group_id_fk" cascade="all" not-null="true"></many-to-one> </class></hibernate-mapping>
这里标签就hibernate定义配置多对一的关系,其中name:User对象里面的属性值;column:是配置在该t_user表中关联t_group表主键的外键的名字;not-null:表示不能为空;重点将写cascade级联属性值的特征
引用了http://blog.csdn.net/phoenix2121/article/details/5691822这篇博客
cascade:级联操作,即你对一个对象进行操作,系统自动将该对象关联的对象也进行相同的操作
我们再来看看Group对象的配置信息,其实你会发现该配置信息和平常的病没有两样,所以就不做介绍
<?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 package="com.xingyao.model"> <class name="Group" table="t_group"> <id name="id" type="java.lang.Integer" column="group_id"> <generator class="native"/> </id> <property name="name" type="java.lang.String"/> </class></hibernate-mapping>
我们来看看怎么查入一个User对象信息
@Test public void insert() { User user = new User(); user.setPassword("33132"); user.setUsername("243432"); Group group = new Group(); group.setId(555); group.setName("nihao"); user.setGroup(group); Session session = HibernateUtil.getSession(); session.beginTransaction();// session.save(group); session.save(user); session.beginTransaction().commit(); }
我们看看这个程序运行会报一个异常
这个异常出现了就是因为:持久状态引用了瞬时状态的对象,所以就会报错。如果将注释移除,然后在添加就能成功;
这里讲讲hibernate对对象的管理,在hibernate框架有三种状态:瞬时状态、持久状态、游离状态
瞬时状态:指对象创建但是没有纳入session管理的对象
持久状态:指对象纳入了session管理的对象
游离状态:指对象脱离了session的管理
其中瞬时状态和游离状态由jvm管理,长期没有使用会自动被GC
那么什么时候算是纳入session管理了呢?
1、调用save(Object obj)方法,将该对象作为参数将给Session对象,但是没关闭session
2、调用update(arg0)方法,但是session没有关闭
3、调用session查询方法得到的对象,但是session没有关闭的时间
4、调用session删除方法得到的对象,但是session没有关闭的时间
- Hibernate框架二之ManyToOne
- 框架之Hibernate(二)
- Hibernate @ManyToOne
- 框架之 hibernate之二
- Hibernate xml配置方法之ManyToOne(单向关联关系)
- Hibernate 使用 Annotation 之 ManyToOne(单向关联关系)
- hibernate之实体@onetomany和@manytoone双向注解
- hibernate之实体@onetomany和@manytoone双向注解
- hibernate之实体@onetomany和@manytoone双向注解
- hibernate注解onetomany manytoone
- Hibernate @ManyToOne -- 1
- Hibernate @OneToMany & @ManyToOne
- Hibernate @ManyToOne保存问题
- Hibernate @ManyToOne Unidirectional Tutorial
- Hibernate-----@OneToMany VS @ManyToOne
- 框架漫谈之hibernate(二)hibernate配置以及入门案例
- 11hibernate hibernate的关系映射之OneToMany和ManyToOne(重点)
- manytoone 和onetomany hibernate配置
- appium环境配置(二)
- 什么叫响应式设计网站?它的优缺点?
- caffe问题汇总
- leetcode 用fast-slow 指针的方法判断链表是否为回文链表。
- 51nod1090
- Hibernate框架二之ManyToOne
- 交通标志识别
- Jquery的ajax方法跳入error引发的一系列问题
- hdu1028 整数划分
- bootstrap:时间选择器datetimepicker调用
- 使用Spring MVC创建REST服务
- 九大排序之——基数排序
- 解码(改)
- javaday53_IO流_文件分割与文件合并的综合应用