hibernate关联映射

来源:互联网 发布:淘宝分享有赏互助qq群 编辑:程序博客网 时间:2024/06/07 02:07

    RoleInfo类:      

package com.hibernate.relation.entity;import java.util.HashSet;import java.util.Set;public class RoleInfo {private Integer roleId;private String roleName;private Set<UserInfo> users = new HashSet<UserInfo>();public Integer getRoleId() {return roleId;}public void setRoleId(Integer roleId) {this.roleId = roleId;}public String getRoleName() {return roleName;}public void setRoleName(String roleName) {this.roleName = roleName;}public Set<UserInfo> getUsers() {return users;}public void setUsers(Set<UserInfo> users) {this.users = users;}@Overridepublic String toString() {return "RoleInfo [roleId=" + roleId + ", roleName=" + roleName + "]";}}


UserInfo类:  

package com.hibernate.relation.entity;public class UserInfo {private Integer userId;private String username;private String password;private RoleInfo roleInfo;public Integer getUserId() {return userId;}public void setUserId(Integer userId) {this.userId = userId;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public RoleInfo getRoleInfo() {return roleInfo;}public void setRoleInfo(RoleInfo roleInfo) {this.roleInfo = roleInfo;}@Overridepublic String toString() {return "UserInfo [userId=" + userId + ", username=" + username+ ", password=" + password + ", roleInfo=" + roleInfo + "]";}}
  HibernateSessionFactoryUtil工具类:

package com.hibernate.relation.util;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.boot.registry.StandardServiceRegistry;import org.hibernate.boot.registry.StandardServiceRegistryBuilder;import org.hibernate.cfg.Configuration;/** * 获取Session对象的工具方法 * @author Administrator。 * @date 2015-12-16 */public class HibernateSessionFactoryUtil {private static SessionFactory sessionFactory;private final static String HIBERNATEXML = "hibernate.cfg.xml";// 创建一个存储本地线程对象private final static ThreadLocal<Session> threadLocal =  new ThreadLocal<Session>();static {// 加载hibernate的配置文件Configuration cfg = new Configuration().configure(HIBERNATEXML);// 注册创建SessionFactory对象的服务StandardServiceRegistry serivce = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();// 通过服务创建SessionFactory对象sessionFactory = cfg.buildSessionFactory(serivce);}/** * 定义获取session对象的方法 */public static Session getSession() {// 从本地线程对象中获取sessionSession session = threadLocal.get();// 如果本地线程中不存在session,就创建一个新的session对象存储if (session==null) {session = sessionFactory.openSession();threadLocal.set(session);}return session;}/** * 定义关闭session的方法 */public static void closeSession() {// 从本地线程对象中获取sessionSession session = threadLocal.get();if (session!=null) {// 判断session是否与数据库连接if (session.isOpen()) {session.close();threadLocal.set(null);}}}}


hibernate.cfg.xml:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><property name="connection.driver_class">com.mysql.jdbc.Driver</property><property name="connection.url">jdbc:mysql://127.0.0.1:3306/userdb</property><property name="connection.username">root</property><property name="connection.password">x5</property><!-- 配置额外属性 --><property name="dialect">org.hibernate.dialect.MySQLDialect</property><property name="show_sql">true</property><property name="format_sql">true</property><!-- 使用正向生成表 --><property name="hbm2ddl.auto">update</property><!-- 加载对象映射文件 --><mapping resource="hbm/RoleInfo.hbm.xml"/><mapping resource="hbm/UserInfo.hbm.xml"/></session-factory></hibernate-configuration>

RoleInfo.hbm.xml: 

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.hibernate.relation.entity"><class name="RoleInfo" table="roleInfo"><id name="roleId"><generator class="native" /></id><property name="roleName" /><set name="users" cascade="all"><key column="roleId" /><one-to-many class="UserInfo"/></set></class></hibernate-mapping>


UserInfo.hbm.xml:   

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.hibernate.relation.entity"><class name="UserInfo" table="userInfo"><id name="userId" column="userId" type="integer"><generator class="native" /></id><property name="username" /><!-- 属性名和数据库表中字段名称一致 --><property name="password" /><!-- 配置关联映射多对一 --><many-to-one name="roleInfo" class="RoleInfo"><!-- 配置与数据表中字段对应 --><column name="roleId" /></many-to-one></class></hibernate-mapping>

测试类:

package com.hibernate.relation.test;import org.hibernate.Query;import org.hibernate.Session;import org.junit.Test;import com.hibernate.relation.entity.RoleInfo;import com.hibernate.relation.util.HibernateSessionFactoryUtil;/** * @author Administrator。 * @date 2015-12-16 */public class TestHibernateRelation {//@Test/*public void test() {System.out.println(HibernateSessionFactoryUtil.sessionFactory);}@Testpublic void test1() {System.out.println(HibernateSessionFactoryUtil.sessionFactory);}@Testpublic void test2() {System.out.println(HibernateSessionFactoryUtil.sessionFactory);}@Testpublic void test3() {System.out.println(HibernateSessionFactoryUtil.sessionFactory);}*/@Testpublic void testRelation() {System.out.println(HibernateSessionFactoryUtil.getSession());}@Test //单向配置public void testManyToOneQuery() {Session session = HibernateSessionFactoryUtil.getSession();// 查询所有//String hql = "from UserInfo";// 根据角色名获取用户对应信息String hql = "FROM UserInfo WHERE roleInfo.roleName=:name";Query query = session.createQuery(hql);query.setString("name", "admin");System.out.println(query.list());//query.setString("id", "1");//UserInfo userInfo = (UserInfo)query.uniqueResult();//System.out.println(userInfo.getRoleInfo().getRoleName());}@Test //双向配置测试public void testOneToMany() {Session session = HibernateSessionFactoryUtil.getSession();String hql = "FROM RoleInfo WHERE roleId=1";Query query = session.createQuery(hql);System.out.println(query.uniqueResult());RoleInfo role = (RoleInfo)query.uniqueResult();session.beginTransaction();session.delete(role);session.getTransaction().commit();System.out.println(role.getUsers());}@Test //双向配置测试public void testadd() {Session session = HibernateSessionFactoryUtil.getSession();String hql = "FROM RoleInfo WHERE roleId=1";Query query = session.createQuery(hql);System.out.println(query.uniqueResult());RoleInfo role = (RoleInfo)query.uniqueResult();session.beginTransaction();session.delete(role);session.getTransaction().commit();System.out.println(role.getUsers());}}




0 0