hibernate单向一对多级联操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hibernate单向一对多级联操作相关的知识,希望对你有一定的参考价值。

主类  User     单方

从类  UserIp  多方要求结果:操作USER类,自动添加USERIP并维护关联关系

 

为了节省篇幅,忽略了get/set方法 请自行添加

User类代码:

public class User {

    /**用户的ID*/
    private long id;

 /**登录用户名*/
    private String username;
    
    /**登录密码*/
    private String password;

 /**IP集合*/
    private Set<UserIp> userIps=new HashSet<UserIp>();

 /**--------get/set----------*/

}

 

 

 

 

 

 

 

 

 

 

UserIp类:

public class UserIp {
    
    /**数据库ID*/
    private long id;
    
    /**用户ID*/
    private long userId;
    
    /**IP地址*/
    private String ip;

  /**--------get/set----------*/

}

 

 

 

 

 

 

 

 

 

User.hbm.xml:

<hibernate-mapping>
    <class name="com.entity.User" table="user" lazy="false" dynamic-insert="true">
    <id name="id" type="long" column="id">
         <generator class="native" />
    </id>
    <property name="username" column="username" />
    <property name="password" column="password" />
    <set name="userIps" table="user_has_ip" cascade="all-delete-orphan" lazy="false" inverse="false">
          <key column="user_id" /><!-- 确定关联的外键列 -->
          <one-to-many class="com.entity.UserIp" />
    </set>
    </class>
</hibernate-mapping>

 

 

 

 

 

 

 

 

 

UserIp.hbm.xml:

<hibernate-mapping>
    <class name="com.entity.UserIp" table="user_has_ip" lazy="false">
        <id name="id" type="long" column="id">
            <generator class="native" />
        </id>
       <property name="ip" column="ip"/>
    </class>
</hibernate-mapping>

 

 

 

 

 

其中关键就在于

 inverse="false"   控制反转,不增加这个参数的话,默认也为false,可以理解为true时,放弃级联关系维护权。

cascade="all-delete-orphan"

all-deleteorphan 的能力:
1. 当保存或更新父方对象时,级联保存或更新所有关联的子方对象,相当于 cascade 为 save-update
2. 当删除父方对象时,级联删除所有关联的子方对象,相当于 cascade 为 delete
3. 删除不再和父方对象关联的所有子方对

 

通过此设置,只需要操作User类,即可对UserIp类做增删改查关联关系维护等操作。。

 

 

 

以上是关于hibernate单向一对多级联操作的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate初探之一对多映射 继续学习

hibernate中配置单向多对一关联,和双向一对多

第六章 Hibernate关联映射

MyBatis一对多级联查询

Hibernate多对多级联操作

hibernate之一对多,多对一