Hibernate七部曲(五)一对多关系映射

来源:互联网 发布:安卓qq2016协议源码 编辑:程序博客网 时间:2024/05/22 17:21

本节实现一对多的关系映射,将多个user和一个group绑定起来做持久化
项目结构:
这里写图片描述
建立实体类User.java

package cn.com.lt.onetomany;public class User {    private int id;    private String username;    private String password;    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    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;    }}

建立实体类Group.java

package cn.com.lt.onetomany;import java.util.Set;public class Group {    private int id;    private String groupname;    private Set<User> users;   public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getGroupname() {        return groupname;    }    public void setGroupname(String groupname) {        this.groupname = groupname;    }    public Set<User> getUsers() {        return users;    }    public void setUsers(Set<User> users) {        this.users = users;    }}

配置User.hbm.xml,当然我们也可以使用EJB注解,有兴趣的小伙伴自己尝试一下

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- 映射对应的 package --><hibernate-mapping package="cn.com.lt.onetomany">    <!-- class 和数据库中 table 对应(如果没有这个表则新建) -->    <class name="User" table="user_table">        <!-- id 主键,设为自增 -->        <id name="id" column="user_id">        </id>        <property name="username" column="user_username"></property>        <property name="password" column="user_password"></property>            </class></hibernate-mapping>

配置Group.hbm.xml,在这里将User绑定进来

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- 映射对应的 package --><hibernate-mapping package="cn.com.lt.onetomany">    <!-- class 和数据库中 table 对应(如果没有这个表则新建) -->    <class name="Group" table="group_table">        <id name="id" column="group_id">        </id>        <property name="groupname" column="group_name"></property>        <!-- 重点关注这里 -->        <!-- Set 为我们在 Group.java 中定义的集合 -->        <set name="users" >             <!-- 外键名称 -->             <key column="group_id" ></key>       <!-- 一对多关系对应的class-->       <one-to-many class="cn.com.lt.onetomany.User"/>    </set>   </class></hibernate-mapping>

最后配置hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?><!DOCTYPE hibernate-configuration PUBLIC        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration>    <session-factory>        <!-- Database connection settings -->        <!-- 表示使用 oracle数据库驱动类 -->        <property name="connection.driver_class">oracle.jdbc.OracleDriver</property>        <!-- jdbc 的连接 url 和数据库(使用我们之前新建的 hibernate)-->        <property name="connection.url">jdbc:oracle:thin:@172.18.1.252:1521:ora9is</property>        <!-- 数据库用户名 -->        <property name="connection.username">test</property>        <!-- 密码(这里为空) -->        <property name="connection.password">test</property>        <!-- 数据库使用的方言 -->        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>        <!-- Echo all executed SQL to stdout -->        <!-- 设置 控制台输出 sql 语句 为真 -->        <property name="show_sql">true</property>        <!-- 设置格式为 sql -->        <property name="format_sql">true</property>        <!-- 第一次加载 hibernate 时根据实体类自动建立表结构,以后自动更新表结构 -->        <property name="hbm2ddl.auto">update</property>                <!-- 映射文件 -->        <mapping resource="cn/com/lt/onetomany/User.hbm.xml"/>        <mapping resource="cn/com/lt/onetomany/Group.hbm.xml"/>    </session-factory></hibernate-configuration>

简单测试:

package cn.com.lt.test;import java.util.HashSet;import java.util.Set;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;import org.junit.Test;import cn.com.lt.onetomany.Group;import cn.com.lt.onetomany.User;public class TestOneToMany {    Configuration cfg = new Configuration().configure();    @SuppressWarnings("deprecation")    SessionFactory sf = cfg.buildSessionFactory();    Session session = sf.openSession();    @Test    public void test1(){        session.beginTransaction();        //新建一个lol群组        Group group = new Group();        group.setGroupname("lol_group");        group.setId(1);        //新建两个用户        Set<User> users = new HashSet<User>();        //第一个user实例        User user1 = new User();        user1.setId(1);        user1.setUsername("ez");        user1.setPassword("qwer");        //第二个        User user2 = new User();         user2.setId(2);        user2.setUsername("suona");        user2.setPassword("qwqw");        //将两个user放进set集合users里        users.add(user1);        users.add(user2);        //将users集合放进group里        group.setUsers(users);        //保存相关对象        for(User user:users){          session.save(user);        }        session.save(group);        session.getTransaction().commit();          session.close();          sf.close();    }}
0 0