我有一个一到许多关系的实体2:的Hibernate查询与取质疑
OfficeView.java:
public class OfficeView implements java.io.Serializable {
private Integer officeId;
private String addr1;
private String city;
private String state;
private String zip;
private List<Devices> devices;
getters and setters
@OneToMany(mappedBy = "officeView", fetch = FetchType.EAGER)
public List<Devices> getDevices() {
return devices;
}
public void setDevices(List<Devices> devices) {
this.devices = devices;
}
}
Devices.java:
public class Devices implements java.io.Serializable {
private Integer devId;
private String devName;
private Date lastUpdate;
private OfficeView officeView;
getters and setters
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "office_id")
public OfficeView getOfficeView() {
return officeView;
}
public void setOfficeView(OfficeView officeView) {
this.officeView = officeView;
}
}
对于一些设备,除了lastUpdate,表中有两个几乎相同的条目。我总是想要检索表格中最近的条目。只有那个条目。
例如,你有2项此设备:
SSA-PITTSB-PA-NEF82 2009-10-12 23时51分07秒 SSA-PITTSB-PA-NEF82 2009-10-15 14: 19:35
当我加载OfficeView包含此(和其他设备)的OfficeView实例时,我只想获取这两个设备中最近的一个。在数据库中,我可以从设备表短名单与此SQL查询:
select t.* from
(select dev_id, dev_name, max(last_update) maxValue
from devices
group by dev_name) x
join devices t on x.dev_name=t.dev_name
and x.maxValue=t.last_update
SSA-PITTSB-PA-NEF82 2009-10-15 14点19分35秒
这是一个seam应用程序和调用查询的OfficeViewHome.java扩展了EntityHome。我认为正确的方法是使用自定义查询来重载loadInstance。
我只是不知道如何构建查询。我该怎么做呢?
我知道如何在SQL中编写连接查询以加入oFfice_view和devices表并获取所有正确的数据。但是我不能使用这个查询来加载实例(就像在createNativeQuery中一样),因为来自devices表的数据需要作为Devices对象列表加载。
我真的希望这是有道理的,因为我完全难倒了。
april26
我知道你会通过ChssPly76!谢谢。我会试试这个。我不会在我的应用程序中更新或删除设备,所以这不会成为问题。 – april26 2009-11-16 11:58:28