初学Hibernate一对多关联
今天,花了些时间去了解了Hibernate的一对多关联,做的例子是
描述一个用户拥有多个角色。实现一个添加用户,从而在数据库中添加用户和角色记录
角色记录由Hibernate完成。
贴个代码:(只贴出主要部分)
1.SQL脚本
--用户表
create table users
(
userID number primary key, --用户ID
name varchar(20) -- not null--真实姓名
);
--角色表
create table roles
(
roleID number primary key, --角色ID
roleName varchar2(20), --角色名称
userID number
);
alter table roles add constraint fk_role_re_user
foreign key(userID) references users(userID);
1.POJO-用户对象
/**
* 用户对象
* @author ChenST
*/
public class Users implements java.io.Serializable {
//用户ID
private Long userid;
//姓名
private String name;
//角色列表
private Set roleses = new HashSet(0);
// Constructors
/** default constructor */
public Users() {
}
////setter和getter方法略
}
2.POJO-角色对象
/**
* 角色对象
* @author ChenST
*/
public class Roles implements java.io.Serializable {
//角色ID
private Long roleid;
//所属于用户
private Users users;
//角色名
private String rolename;
//所属于用户ID
private Long userid;
// Constructors
/** default constructor */
public Roles() {
}
///setter和getter方法略
}
3.HBM-用户映射文件
<hibernate-mapping>
<class name="com.shine.pojo.Users" table="USERS" schema="CST">
<id name="userid" type="java.lang.Long">
<column name="USERID" precision="22" scale="0" />
<!--
如果非自动增长列,可以设置成assigned
不能设置成sequence
-->
<generator class="assigned"/>
</id>
<property name="name" type="java.lang.String">
<column name="NAME" length="20" />
</property>
<!--
此处的cascade要设置成save-update,
否则无法级联更新(插入)
cascade的值
sava-update:级联保存、更新
delete:级联删除
none:不级联,默认值
all:级联保存、更新、删除
inverse属性表示是否把对Set的改动反应到数据库中去
inverse=true不反应 inverse=false反应(默认)
=false表示会去维护中间表 =true表示不会去维护中间表
-->
<set name="roleses" inverse="false" cascade="save-update">
<key>
<column name="ROLEID" precision="22" scale="0"
not-null="true" unique="true" />
</key>
<one-to-many class="com.shine.pojo.Roles" />
</set>
</class>
</hibernate-mapping>
4.HBM-角色映射文件
<hibernate-mapping>
<class name="com.shine.pojo.Roles" table="ROLES" schema="CST">
<id name="roleid" type="java.lang.Long">
<column name="ROLEID" precision="22" scale="0" />
<!--
如果非自动增长列,可以设置成assigned
不能设置成sequence
-->
<generator class="assigned" />
</id>
<many-to-one name="users" class="com.shine.pojo.Users"
update="false" insert="false" fetch="select">
<column name="ROLEID" precision="22" scale="0"
not-null="true" unique="true" />
</many-to-one>
<property name="rolename" type="java.lang.String">
<column name="ROLENAME" length="20" />
</property>
<property name="userid" type="java.lang.Long">
<column name="USERID" precision="22" scale="0" />
</property>
</class>
</hibernate-mapping>
5.DAO-用户DAO实现类
/**
* 用户Dao的实现类
* @author ChenST
*
*/
public class UserDaoImpl implements IUserDao {
/**
* 保存对象
*/
public void save(Users user) {
//Session对象负责执行被持久化对象的CURD操作
Session session=null;
//Transaction对象负责事务上的
Transaction trans=null;
try{
//获取session对象
session=HibernateSessionFactory.getSession();
//获取事务
trans=session.beginTransaction();
session.saveOrUpdate(user);
trans.commit();
}catch (Exception e) {
e.printStackTrace();
trans.rollback();
}finally{
//关闭Session
HibernateSessionFactory.closeSession();
}
}
}
6.JUNIT-用户Dao测试
/**
* 测试UserDao
* @author ChenST
*/
public class UserDaoTest extends TestCase {
/**
* 测试保存方法
*/
public void testSave(){
IUserDao userDao=new UserDaoImpl();
Users user=new Users(3L,"cst",new HashSet());
Roles role1=new Roles(3L,user,"a",3L);
user.getRoleses().add(role1);
userDao.save(user);
}
}
完毕。。。
评论 (0)