zoukankan      html  css  js  c++  java
  • 多对多关联映射(单向)

    inverse属性:

    inverse主要用在一对多和多对多双向关联上,inverse可以被设置到集合标签<set>上,默认inverse为false,所以我们可以从"一"一端和"多"一端维护关联关系,如果设置成inverse为true,则我们只能从多一端来维护关联关系。

    inverse属性,只影响数据的存储,也就是持久化。

    一个用户可能拥有多个角色(user-->role)

    package com.jonsion.hibernate;
    public class Role {
    private int id;
    private String name;
    public int getId() {
    return id;
    }
    public void setId(int id) {
    this.id = id;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    }
    package com.jonsion.hibernate;
    import java.util.Set;
    public class User {
    private int id;
    private String name;
    private Set roles;
    public Set getRoles() {
    return roles;
    }
    public void setRoles(Set roles) {
    this.roles = roles;
    }
    public int getId() {
    return id;
    }
    public void setId(int id) {
    this.id = id;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    }
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
          "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
              "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping >
    <class name="com.jonsion.hibernate.Role">
    <id name="id">
    <generator class="native"/>
    </id>
    <property name="name"/>
    </class>
    </hibernate-mapping>
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
          "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
              "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping >
    <class name="com.jonsion.hibernate.User">
    <id name="id">
    <generator class="native"/>
    </id>
    <property name="name"/>
    <set name="roles" table="t_user_role">
    <key column="userid"/>
    <many-to-many class="com.jonsion.hibernate.Role" column="roleid"/>
    </set>
    </class>
    </hibernate-mapping>
    package com.jonsion.hibernate;
    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.Set;
    import junit.framework.TestCase;
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    public class Many2ManyTest extends TestCase{
    public void testSave1(){
    Session session=null;
    Transaction tx=null;
    try{
    session=HibernateUtils.getSession();
    tx=session.beginTransaction();
    Role r1=new Role();
    r1.setName("大堂经理");
    session.save(r1);
    Role r2=new Role();
    r2.setName("出纳");
    session.save(r2);
    Role r3=new Role();
    r3.setName("业务员");
    session.save(r3);
    User user1=new User();
    user1.setName("阿希");
    Set r1role=new HashSet();
    r1role.add(r1);
    r1role.add(r2);
    user1.setRoles(r1role);
    User user2=new User();
    user2.setName("阿雅");
    Set r2role=new HashSet();
    r2role.add(r2);
    r2role.add(r3);
    user2.setRoles(r2role);
    User user3=new User();
    user3.setName("阿杜");
    Set r3role=new HashSet();
    r3role.add(r1);
    r3role.add(r2);
    r3role.add(r3);
    user3.setRoles(r3role);
    session.save(user1);
    session.save(user2);
    session.save(user3);
    tx.commit();
    }catch(Exception ex){
    ex.printStackTrace();
    tx.rollback();
    }finally{
    HibernateUtils.closeSession(session);
    }
    }
    public void testLoad1(){
    Session session=null;
    Transaction tx=null;
    try{
    session=HibernateUtils.getSession();
    tx=session.beginTransaction();
    User user=(User)session.load(User.class, 3);
    System.out.println(user.getName());
    for(Iterator it=user.getRoles().iterator();it.hasNext();){
    Role role=(Role)it.next();
    System.out.println(role.getName());
    }
    tx.commit();
    }catch(Exception ex){
    ex.printStackTrace();
    tx.rollback();
    }finally{
    HibernateUtils.closeSession(session);
    }
    }
    }
  • 相关阅读:
    BOM弹窗 滚动条
    标签占位信息
    标签样式操作
    Keepalived入门学习
    史上最全Redis面试题(2020最新版)
    一文带你读懂zookeeper在大数据生态的应用
    详细解析虚拟化的起源和分类
    干货 | Nginx负载均衡原理及配置实例
    干货 | 一文彻底读懂nginx中的location指令
    史上最全Linux面试题(2020最新版)
  • 原文地址:https://www.cnblogs.com/jinzhengquan/p/1958203.html
Copyright © 2011-2022 走看看