gpt4 book ai didi

java - hibernate 如何检索层次结构对象

转载 作者:行者123 更新时间:2023-12-04 07:02:27 26 4
gpt4 key购买 nike

我有以下 bean 任务、ServerDetails 和 ApplicationDetails。
我希望根据特定的应用程序名称检索所有任务、它们的服务器详细信息和应用程序详细信息。

从结果中,我希望能够以如下方式检索数据:
task.getServers().getApplicationDetails()

实际上,我得到的似乎是平面数据表示为 Object[]。

有什么办法可以做我的建议吗?

以下是我的代码...

class Task {
private String taskId;
private Set<ServerDetails> servers;
}

class ServerDetails {
private String id;
private Set<ApplicationDetails> applications;
}

class ApplicationDetails {
private String id;
}

高品质:
StringBuilder hql = new StringBuilder(256);
hql.append("FROM Task h, ServerDetails ser, ApplicationDetails app ");
hql.append("WHERE h.executionDate > ");
hql.append("to_date('");
hql.append(DBDateFormatter.getInstance().formatDate(cal));
hql.append("', '");
hql.append(DBDateFormatter.getInstance().getOracleDateFormat());
hql.append("') and h.id = ser.task.id and ser.id = app.server and app.name = 'XXX'");
hql.append(" order by h.executionDate desc");
String hql = hql.toString();

Query query = session.createQuery(hql);
results = (List<Object[]>) query.list();

最佳答案

您应该只检索主对象。

对于另一个,您可以:

  • 导航到他们,而 Session尚未关闭(根据需要运行其他查询,称为惰性;这是易于使用的理想选择)
  • 使用 fetch 在原始查询中检索它们关键词。

  • 例子:
        SELECT h 
    FROM Task h
    JOIN FETCH h.serveurs ser
    JOIN FETCH ser.applications app
    WHERE h.executionDate >
    .... // no need to specify the joins

    您将能够以如下方式检索数据: task.getServers().getApplicationDetails()

    关于java - hibernate 如何检索层次结构对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1636796/

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