【发布时间】:2018-11-06 16:38:18
【问题描述】:
@Entity
public class Device {
private long id;
private String deviceName; //column D_NAME
private Set<LoginDate> loginDates;
}
/**
Audit table being filled by some other processes on the network
*/
@Entity
public class LoginDate {
private long id; //pk
private String deviceName; //column D_NAME
private Date loginDate;
}
我的目标是在报告屏幕上显示设备的最后登录日期;我已经在Device 和LoginDate 表之间实现了OneToMany 关系,它使用OrderBy 对loginDates 进行降序排序,以便我可以选择要在屏幕上显示的第一项。但是当登录的数量越来越大时,这是一个有点昂贵的操作。我应该怎么做才能只选择最后一次登录日期;
我可以使用 Hibernate 的
@Formula通过它的 带有相关参数的构造函数。但这将触发数量 选择报告屏幕中的每个项目。我可以在业务层实现另一种方法,这样一旦 已加载列表;我可以使用相关的 D_NAMES 启动另一个 HQL 来获取 D_NAME、loginDate 配对并循环遍历它们。哪个是 从数据库中选择一个,但在应用程序上进行映射工作 一边。
那么你有什么其他的建议让我建议像连接查询以选择设备并且它是最后一次登录日期(不是日期)吗?我认为这应该以某种方式要求加入站点上的 where 子句,但后来我碰壁了,不知道该怎么做。
你有什么建议?
顺便说一句,我没有发布设备的所有属性,但正如您可能意识到的那样,那里的许多属性和大多数其他属性都是通过使用 HQL 和 LEFT OUTER 连接到其他相关表/实体的选择来获取的加入。
【问题讨论】:
标签: hibernate jpa join orm relational-database