gpt4 book ai didi

java - 使用 Hibernate 和 spring 从不同表形成对象列表的最佳方法是什么

转载 作者:太空宇宙 更新时间:2023-11-04 14:46:58 25 4
gpt4 key购买 nike

我正在尝试创建一个对象列表,其中包含来 self 的数据库的不同类型的日志。我想构建列表,以便订单是最近制作的(每个表中的创建日期字段)。

那么,唯一的方法是获取每个列表(4 种不同类型的日志),然后循环遍历它们,并通过比较它们并每次获取最新的列表,将它们放入新列表中?如果列表确实很长(可能很长,也可能不是),这似乎可能需要很长时间。

是否有更好的方法使用 Hibernate 来完成此操作,我可以将所有表放在一起并让它为我完成工作?这些表不共享任何键或任何正常连接的内容?

任何建议都会有帮助。

联系日志有列(Id、memberId、电话号码、电子邮件、地址、日期更改)

工资日志有列(Id、memberId、薪水、dateChanged)

关系日志有列(Id、memberId、relationId、dateChanged)

个人信息日志有列(Id、memberId、高度、体重、eyeColor、hairColor、dateChanged)

这些日志的目的是表明有人更改信息的任何时间,并且我试图向用户提供一个审核页面,该页面将显示对这些不同对象的所有更改。

最佳答案

我建议使用 UNION,但如果我没记错的话,HQL 不支持 UNION,因此您必须使用 native 查询和结果转换器。这是一个示例:

     public class Log {
private Long id;
private Long memberId;
private String logType;
private Date dateChanged;

// getters & setters here
}


public class LogService {

@PersistenceContext
private EntityManager em;

public List<Log> getLogs(){
final Session sess = em.unwrap(Session.class);
final SQLQuery query = session.createSQLQuery(
"select id,memberId,'CONTACT' as logType, dateChanged from contactLog"+
"union select id,memberId,'SALARY' as logType,dateChanged from salaryLog"+
"union select id,memberId,'RELATIONS' as logType,dateChanged from relationsLog"+
"union select id,memberId,'PERSONAL INFO' as logType,dateChanged from personalInfoLog "+
"order by dateChanged desc";
);

query.setResultTransformer(Transformers.aliasToBean(Log.class));

return query.list();
}
}

请注意,仅选择公共(public)列(因为使用联合时必须从每个表中选择相同数量的列)。

如果您想查看日志的完整详细信息,只需使用 id 加载特定日志和日志类型即可知道您需要从哪个表中查找完整信息。

您可以修改查询,将所有更改的信息连接到所有表的一列中(这意味着在 Log.class 中添加一个新字段)。

     public class Log {
private Long id;
private Long memberId;
private String logType;
private Date dateChanged;
private String changedInfo;
// getters & setters here
}
"select id,memberId,'CONTACT' as logType, dateChanged, phonenumber||','||email||','||address as changedInfo from contactLog"+
"union select id,memberId,'SALARY' as logType,dateChanged,salary as changedInfo from salaryLog"+
"union select id,memberId,'RELATIONS' as logType,dateChanged,relationId as changedInfo from relationsLog"+
"union select id,memberId,'PERSONAL INFO' as logType,dateChanged, height||','|| weight||','|| eyeColor||','|| hairColor as changedInfo from personalInfoLog "+
"order by dateChanged desc

关于java - 使用 Hibernate 和 spring 从不同表形成对象列表的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24293341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com