hibernate中映射多对多的问题

问题描述

在hibernate中,如果要映射多对多的映射比如有两个实体:user, privilege,数据库中通过link表来表示两者的关联关系,单在link中有一个flag标识是否有效,这样怎样在hibernate中解决?拆成两个一对多?还有没有其他方法?问题补充:我的意思是link中除了那三个字段之外,我还有一个字段表示这个关系是否生效,也就是说,这个字段是重点,在业务中要靠这个字段来确定映射关系是否有效。谢谢问题补充:formular我试过可是如果我的需求是动态的,怎么办?其实这才是我的真正问题。我的意识是flag有很多种值,我需要根据业务选择不同的值,用where只能产生死的值。问题补充:比如说:User和Role之间的多对多关系,中间表USER_ROLE中不仅有user_id和role_id,还有两个子段,标识有效期。有一个是begin_date,一个是end_date。具体到业务上:一个是查询某个user现在所拥有的role,另外一个是:曾经拥有的role。问题补充:感谢回答。

解决方案

如果这样的话,可以改成<one-to-many>的写法,生成一个中间UserRole类。或者可以试试<composite-element><set name="items" lazy="true" table="CATEGORY_ITEMS"><key column="CATEGORY_ID"/><composite-element class="CategorizedItem"><parent name="category"/><many-to-one name="item"class="Item"column="ITEM_ID"not-null="true"/><property name="username" column="USERNAME" not-null="true"/><property name="dateAdded" column="DATE_ADDED" not-null="true"/></composite-element></set>从<Hibernate in Action> 229页转载,如有需要,通知我一声
解决方案二:
引用我的意识是flag有很多种值,我需要根据业务选择不同的值,用where只能产生死的值。 能取个具体的例子吗?是用在什么样的逻辑上呢?
解决方案三:
你可以试一下:<class name="User" table="User"> <id...>...</id> <set name="privileges" table="link" lazy="false" where="flag='available'"> <key column="userid"/> <many-to-many class="Privilege" column="privilegeid" lazy="false"/> </set> </class> 或者formula这个标签。希望对你有帮助!
解决方案四:
link中有三个字段:id,userid,privilegeidUser.hbm:<class name="User" table="User"> <id...>...</id> <set name="privileges" table="link" lazy="false"> <key column="userid"/> <many-to-many class="Privilege" column="privilegeid" lazy="false"/> </set></class>Privilegeid配置也一样

时间: 2024-08-04 03:55:51

hibernate中映射多对多的问题的相关文章

hibernate-Oracle数据库中新增一个字段,Hibernate中映射怎样加?

问题描述 Oracle数据库中新增一个字段,Hibernate中映射怎样加? 问题:我在oracle数据库中新增一个字段,那么在Hibernate映射中,需要手动加进去吗?在中. 谢谢!! 解决方案 类似这样,第一个name对应实体中,第二个name对应数据库 解决方案二:

【SSH系列】Hibernate映射 -- 多对多关联映射

     映射原理         在数据库学习阶段,我们知道,如果实体和实体之间的关系是多对多,那么我们就抽出来第三张表,第一张表和第二张表的主键作为第三表的联合主键,结合我们的hibernate,多对多关联,无论是单向关联还是双向关联都是通过第三张表,将两个表中的主键放到第三张表中做一个关联,用第三张表来解决可能造成的数据冗余问题.今天这篇博文小编来简单的介绍一下hibernate中的多对多关联映射.        在某些系统中,一个用户可以有多个角色,一个角色也可以有多个用户,so,她们之

【SSH系列】Hibernate映射-- 多对一单向关联映射

      在hibernate中非常重要的就是映射,在前面的博文中,小编简单的介绍了基本映射,基本映射是对一个实体进行映射,关联映射就是处理多个实体之间的关系,将关联关系映射到数据库中,所谓的关联关系在对象模型中有一个或多个引用.这个比较简单,但是基础知识还是需要好好掌握的哦,还有一些关联映射,比如user && group,她们之间的关系是一对多,我们知道一个用户只能属于一个组,但是一个组可以包好N多个用户,所以他们之间的关系就是多对一的关系,接着我们来看他们的对象模型以及关系模式.

hibernate 映射-多对多双向

hibernate 中的多对多,在数据库中就是一张中间表, 范例: 考试与考试之间是一种多对多的关系: (1)一个考生可以参加多场考试: (2)一场考试可以有多个考生参加: (3)不同的考生可以参加同一场考试:不同的考试可以有相同的考生. 考生类:User,中有成员变量private List<Exam> exams  考试类:Exam,中有成员变量 private List<User> users 在User.Java 中的配置: Java代码   @ManyToMany    

hibernate的映射关系的问题

问题描述 hibernate的映射关系的问题 解决方案 第二个Sysotem.out.println() 不执行是为什么 解决方案二: 程序信息太少,但是第二句输出没执行,可能的原因就是collect.setGoods(g);这个操作出现异常了: 可能是collect为null,则会出现空指针异常,可能是在你的setGoods方法中做了一些导致异常的处理. 解决方案三: ????如果为主键关联, 在hibernate中当关系为1-1时候 并且此表的主键为外键的时候 则设置的属性为?/**????

Hibernate配置文件中映射元素详解

详解 本文中将讲述Hibernate的基本配置及配置文件的应用,这对于正确熟练使用Hibernate是相当关键的. 配置文件中映射元素详解 对象关系的映射是用一个XML文档来说明的.映射文档可以使用工具来生成,如XDoclet,Middlegen和AndroMDA等.下面从一个映射的例子开始讲解映射元素,映射文件的代码如下. <?xml version="1.0"?><!--所有的XML映射文件都需要定义如下所示的DOCTYPE.Hibernate会先在它的类路径(c

举例讲解Java的Hibernate框架中的多对一和一对多映射_java

多对一(Many-to-One)映射多对一(many-to-one)关联是最常见的关联关系,其中一个对象可以与多个对象相关联.例如,一个相同的地址对象可以与多个雇员的对象相关联. 定义RDBMS表: 考虑一个情况,我们需要员工记录存储在EMPLOYEE表,将有以下结构: create table EMPLOYEE ( id INT NOT NULL auto_increment, first_name VARCHAR(20) default NULL, last_name VARCHAR(20)

hibernate中java.util.Date类型映射

在Hibernate中对于java.util.Date类型的映射为: java类型 Hibernate类型 Mysql类型 java.util.Date.java.sql.Date date DATE java.util.Date.java.sql.Time time TIME java.util.Date.java.sql.Timestamp timestamp TIMESTAMP 如果使用timestamp作为Date类型映射时,具体代码如下: Java代码 public class Use

分页-Hibernate中多对多关系中给用户赋予权限遇到的问题

问题描述 Hibernate中多对多关系中给用户赋予权限遇到的问题 我的问题是这样的 我有一个用户表 elec_user 一个角色表 elec_role 一个用户表和角色表之间联系的中间表 elec_user_role 我在jsp页面中给相应的角色赋予角色 但是由于考虑到角色太多,就给显示角色信息的table使用了分页 但是最后我给角色勾选了分配角色后,由于点了分页的原因,之前的数据又没有了,这又没有 好的解决办法呢?? 我的想法就是在jsp页面中搞个隐藏域,当每次勾选了就给隐藏域的值加上每个角