package com.hibernate;
import java.util.Date;
public class User1 {
private String id;
private String name;
private String password;
private Date createTime;
private Date expireTime;
public String getId() {
return id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getExpireTime() {
return expireTime;
}
public void setExpireTime(Date expireTime) {
this.expireTime = expireTime;
}
}
<id name="id" type="long" column="cat_id">
<generator class="org.hibernate.id.TableHiLoGenerator">
<param name="table">uid_table</param>
<param name="column">next_hi_value_column</param>
</generator>
</id>
public class User {
private String name;
public String GetName(){
return name;
}
public void SetName(String name){
this.name=name;
}
private Group group;
public Group GetGroup(){
return group;
}
public void SetGroup(Group group){
this.group=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"> <!-- Generated 2014-5-14 23:39:25 by Hibernate Tools 3.4.0.CR1 --> <hibernate-mapping> <class name="com.hibernate.User" table="USER"> <id name="id" type="java.lang.Long"> <column name="ID" /> <generator class="assigned" /> </id> <!-- name的值group为User.java中的一个对应的one中的一个属性,它会自动在表中生成一列,所以使用column对列进行了重命名 --> <many-to-one name="group" column="groupid"></many-to-one> </class> </hibernate-mapping>
public void testSave1(){
Session session=null;
try{
session=GetSession.getSession();
session.beginTransaction();
Group group=new Group();
group.SetName("动力节点");
User user1=new User();
user1.SetName("张三");
user1.SetGroup(group);
User user2=new User();
user2.SetName("李四");
user2.SetGroup(group);
session.save(user1);
session.save(user2);
//会报TransientObjectException错误
//在清理缓存时发生错误TransientObjectException
//因为Group为Transient状态,没有被Session,在数据库中没有匹配的数据
//而User为Persistent状态,在清理缓存时Hibernate在缓存中无法找到Group对象
//揭露:Persistent状态的对象不能引用Transient状态的对象
//该问题在testSave2方法中更改
session.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
session.getTransaction().rollback();
}finally{
GetSession.CloseSession(session);
}
}
public void testSave2(){
Session session=null;
try{
session=GetSession.getSession();
session.beginTransaction();
Group group=new Group();
group.SetName("动力节点");
session.save(group); //此处将group对象设置为Persistent对象
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中可以找到关联对象
session.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
session.getTransaction().rollback();
}finally{
GetSession.CloseSession(session);
}
}
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Generated 2014-5-14 23:39:25 by Hibernate Tools 3.4.0.CR1 --> <hibernate-mapping> <class name="com.hibernate.User" table="USER"> <id name="id" type="java.lang.Long"> <column name="ID" /> <generator class="assigned" /> </id> <!-- 级联修改表 --> <many-to-one name="group" column="groupid" cascade="save-update"></many-to-one> </class> </hibernate-mapping>
//级联cascade
public void testSave3(){
Session session=null;
try{
session=GetSession.getSession();
session.beginTransaction();
Group group=new Group();
group.SetName("动力节点");
User user1=new User();
user1.SetName("张三");
user1.SetGroup(group);
User user2=new User();
user2.SetName("李四");
user2.SetGroup(group);
session.save(user1);
session.save(user2);
//没有抛出TransientObjectException异常
//因为使用了级联
//Hibernate会首先保存User的关联对象Group
//Group和User就都是Persistent状态的对象了
session.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
session.getTransaction().rollback();
}finally{
GetSession.CloseSession(session);
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有