Alpha峰 2017-04-11 02:41
浏览 1099
已结题

Hibernate 一对多查询,筛选多方,使之变成一对一

现有两个持久化的类 :
员工Employee (id ,name,department, ...)

合同Contact(id,employee,startTime,endTime,...)。
一个员工可对应多个合同, 现要进行连接查询 达到 员工与合同成为一对一。
规则: 每个员工只取最新的合同:即startTime 是最大的。
已经有一个思路:
"from bropen.erp.hr.employee.Contract where employee=? and active=1 order by dateStart desc“
可是员工和合同还有很多字段我需要把他们进行联合查询组成一个Map 进行后续运算。
我的需求就是要做一个 员工合同中任意字段组合的条件查询: 比如部门A,且16年签订合同的员工 。。。等等
我知道的思路:
select new map(e.code as code,e.id as empId,e.name as employeeName,e.company.name as company,
e.department.name as department,c.position as position) from Employee e left outer join e.contracts c
where (c.id in (select max(id) from Contract where employee.id = e.id and c.active=1 group by employee.id) or c.id is null)
(// 有多个合同时,选择id最大的一个,因为是最后存入的)
这个虽然行的通,但是这种曲线救国的方式还是不符合实际业务,现在需要达成 :一对一的连接条件是该员工开始时间最大的合同。

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 求差集那个函数有问题,有无佬可以解决
    • ¥15 【提问】基于Invest的水源涵养
    • ¥20 微信网友居然可以通过vx号找到我绑的手机号
    • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
    • ¥15 解riccati方程组
    • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
    • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
    • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
    • ¥50 树莓派安卓APK系统签名
    • ¥65 汇编语言除法溢出问题