我尝试用Java和Hibernate实现文档修改跟踪系统。每个文档的mod都使用autor和timestamp保存。要获得文档的创建者,我需要获得最早的mod。这是:
@Entity
@Table(name="Modifications")
public class Modification
{
String autor;
Date dateTime;
Document document;
@ManyToOne
public Document getDocument() {
...
}
// Author of this mod
@Column(name="Autor")
public String getAutor() {
...
}
// and other properties
}
@Entity
@Table(name="Documents")
public class Document
{
private List<Modification> modifications;
@OneToMany(mappedBy="document")
public List<Modification> getModifications() {
...
}
// this property is question about. How should I implement this with hibernate?
//I don't want to store "autor" field in entity,
//it should be determined with query to modifications table.
// But I can't find any example of defining properties this way...
// So I need your advices :)
public String getAutor() {
...
}
// other properties
}
答案 0 :(得分:1)
我不会在getAutor()
方法中实现查询,至少不在实体中。
IMO entites不应该自己执行查询。
那你为什么不在一些服务/ DAO中提供一个根据需要提供作者的方法呢? 或者,您可能希望在文档中为作者创建一个瞬态字段,并让它由dao填充。这样,您只需加载一次作者并多次访问该信息。
答案 1 :(得分:1)
我猜你正试图通过注释来做到这一点。您可以尝试在修改列表中设置@OrderBy,并让getAutor()函数检索第一个(或最后一个)实体。
虽然我更喜欢托马斯的方法,以便更好地分离出这种逻辑。