【Hibernate】双向多对多Set查询

一个计划对于多个竞价,一个竞价对应多个计划。

1.实体

/**
 * @author Tidy
 * @Description 计划
 */
public class EbgStockPlanContent extends Model {
  /***省略***/
  private Set<EbgBidding> biddingSet = new HashSet<EbgBidding>();
  /***省略getset***/
}

/**
 * @author Tidy
 * @Description 竞价
 */
public class EbgStockPlanContent extends Model {
  /***省略***/
  private Set<EbgStockPlanContent> planSet = new HashSet<EbgStockPlanContent>();
  /***省略getset***/
}

2.多对多配置(xml方式)

<set name="biddingSet" table="T_EB_BIDDING_PLAN_COMPOSE" cascade="none" inverse="false" lazy="true">
  <key column="PLAN_CONTENT_ID"></key>
  <many-to-many class="gdgpes.ebg.model.bid.EbgBidding" column="BIDDING_ID"></many-to-many>
</set>

<set name="planSet" table="T_EB_BIDDING_PLAN_COMPOSE" cascade="none" inverse="false" lazy="true">
  <key column="BIDDING_ID"></key>
  <many-to-many class="gdgpes.ebg.model.plan.EbgStockPlanContent" column="PLAN_CONTENT_ID"></many-to-many>
</set>

3.测试

4.elements()操作set集合

//remarkhql.append(" and mo.id not in (").append("select elements(planSet) from EbgBidding t1 where t1.type = 1").append(")  and mo.price=5 ");//1.直接查询set记录select elements(planSet) from EbgBidding t1 where t1.type = 1//2.in set记录and mo.id not in elements(mo.biddingSet)

上例1.对应生成的sqlselect planset2_.PLAN_CONTENT_IDfrom T_EB_BIDDING ebgbidding1_,     T_EB_BIDDING_PLAN_COMPOSE planset2_ where ebgbidding1_.ID = planset2_.BIDDING_ID   and ebgbidding1_.TYPE = 1
时间: 2024-08-05 15:44:14

【Hibernate】双向多对多Set查询的相关文章

Hibernate 双向 多对一

双向多对一和单向多对一唯一不同的地方是多对一的一那端增加了到多那端的映射关联,参照模型还是顾客(customer)-订单(order) package com.demo.model.many2one.both; import java.util.HashSet; import java.util.Set; public class Customer { private Integer id; private String name; private Set<Order> orders = ne

Hibernate双向多对多关联

一.配置双向多对多关联 以Project类(项目)和Emp类(员工)为例: 1.创建Project类,并需要定义集合类型的Emp属性 public class Project { //编号 private Integer pid; //名称 private String pname; //定义集合类型的Emp属性 private Set<Emp> emps=new HashSet<Emp>(); public Integer getPid() { return pid; } pub

Hibernate双向多对多对象关系模型映射

1 双向many-to-many 业务模型: 描述员工和项目 一个员工同时可以参与多个项目 一个项目中可以包含多个员工 分析:数据库的数据模型,通过中间关系表,建立两个one-to-many构成many-to-many 1 create table emp 2 ( 3 eno int primary key auto_increment, 4 ename varchar 5 ); 6 create table project 7 ( 8 pid int primary key auto_incr

8、双向一对多的关联关系(等同于双向多对一。1的一方有对n的一方的集合的引用,同时n的一方有对1的一方的引用)

双向一对多关联关系 ”双向一对多关联关系“等同于”双向多对一关联关系“:1的一方有对n的一方的集合的引用,同时n的一方有对1的一方的引用. 还是用客户Customer和订单Order来解释: ”一对多“的物理意义:一个客户可以有多个订单,某个订单只能归宿于一个客户. ”双向“的物理意义:客户知道自己有哪些订单,订单也知道自己归宿于哪个客户.也就是说,通过客户对象可以检索到其拥有哪些订单:同时,通过订单也可以查找到其对应的客户信息.这是符合我们业务逻辑需求. 到现在为止(结合前面两节的阐述)我们可

Hibernate 多对一关联查询

一.单向多对一和双向多对一的区别 如果只需要从一方获取另一方数据,就用单向多对一:如果需要从双方都获取对方数据,就用双向多对一. 如果有两个对象,一个为User对象,一个为Department对象,一个用户只能属于一个部门,而一个部门可以包含多个用户.这样就是多对一关系.如下图 假设:我们需要通过用户找到所对应的部门,不需要通过部门查询该部门有哪些用户,就采用单向多对一关系 如果:我们不仅需要通过用户获取所对应的部门,还需要通过部门对象获取该部门下的用户,那么就采用双向多对一 二.单向多对一关系

hibernate(四) 双向多对多映射关系

序言 莫名长了几颗痘,真TM疼,可能是现在运动太少了,天天对着电脑,决定了,今天下午花两小时去跑步了, 现在继上一章节的一对多的映射关系讲解后,今天来讲讲多对多的映射关系把,明白了一对多,多对多个人感觉还是比较容易的,需要理清楚其数据库关系图,那么你就拿下了它.映射文件的配置还是那么些死东西. --WH 一.小疑问的解答 问题一:到这里,有很多学习者会感到困惑,因为他不知道使用hibernate是不是需要自己去创建表,还是hibernate全自动,如果需要自己创建表,那么主外键这种设置也是自己设

Hibernate 单向/双向 多对多

Hibernate的多对多从单向和双向来分就是单向多对多和双向多对多两种. Hibernate的双向多对多 先来说一下什么是多对多的关系,举个例子,老师和学生,老师有语文老师,数学老师,英语老师等等,学生可以是1班的学生也可以是2班的学生,对于每个学生而言,他有多个老师给他讲课,而对于每一个老师而言,他要授课的学生也有很多,像这样的情况就可以描述成多对多了.即两个表之间,每一个表中的记录都对应另一个表的部分或全部记录的集合,这种情况就是多对多关系,而单向多对多与双向多对多的不同在于单向只是一方的

--------Hibernate框架之双向多对多关系映射

今天跟大家分享下在Hibernate中双向的多对多的映射关系 这次我们以项目和员工举个栗子,因为大家可以想象得到,在真实的环境下,一个项目肯定是对应着多个员工的,这毫无疑问, 那么同时,一个比较牛员工也能同时参与多个项目的开发,这就体现了双向多对多的关系. 首先呢,我们得弄清楚在底层数据库中表与表之间的关系,我们创建一个员工表(Employee)和项目表(Project)毫无疑问,那么我们要怎么体现出多对多的关系呢? 当然有很多种方法,这里我以单独提出一张关系表为例,也就是说,我单独创建一张表来

Hibernate映射多对多双向关联关系(小案例)

多对多双向关联关系(Project(工程)/Emp(员工)为案例): 步骤如下: 1.创建Project类,并需要定义集合类型的Emp属性 public class Project { //编号 private Integer pid; //名称 private String pname; //定义集合类型的Emp属性 private Set<Emp> emps=new HashSet<Emp>(); public Integer getPid() { return pid; }