多对一关联映射是最常见的单向关联关系,多对一能够实现查“多”的一方的时候,也出现“一”的那一方。对象图形中,关联是有方向的,只能通过用户可以找到相应的组。关联图形中,因为加上了外键,所以可以从用户看到组,也可以从组看到用户。在多的一端加外键,指向一的一端。多对一的关系就体现在设置了外键。
l 代码:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"".0.dtd">
<hibernate-mapping ><class name="com.bjpowernode.hibernate.User" table="t_user"><id name="id"><generator class="native"/></id><property name="name"/><!-- 多对一标签,设置外键,使用级联属性--!><many-to-one name="group" column="groupid" cascade="save-update"/></class>
</hibernate-mapping>
Many2OneTest 代码:
public void testSave1(){Session session=null;try{sessionSession();session.beginTransaction();Group group=new Group();group.setName("小组");session.save(group);//纳入session管理,group 就为持久状态,就可以保存数据了User user1 = new User();user1.setName("琪娅拉");user1.setGroup(group);User user2=new User();user2.setName("高孚");user2.setGroup(group);session.save(user1);session.save(user2);//可以正确的保存数据//因为Group和User都是Persistent状态的对象//所以在hibernate清理缓存时在session中可以找到关联对象Transaction()mit();}catch(Exception e){e.printStackTrace();Transaction().rollback();}finally{HibernateUtils.closeSession(session);}
}
如果上面代码中不写 session.save(group); ,在hibernate清理缓存的时候就会抛出 TransientObjectException的错误。因为未保存的group是transient状态,在数据库中没有匹配的数据。而user是persistent状态,在清理缓存时hibernate在缓存中无法找到group对象,也就是persistent状态的对象不能引用transient状态的对象。本文发布于:2024-02-01 03:29:05,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170672934733544.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |