由查询定义的Hibernate实体属性

时间:2011-09-02 07:26:09

标签: java hibernate hql

我尝试用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
}

2 个答案:

答案 0 :(得分:1)

我不会在getAutor()方法中实现查询,至少不在实体中。 IMO entites不应该自己执行查询。

那你为什么不在一些服务/ DAO中提供一个根据需要提供作者的方法呢? 或者,您可能希望在文档中为作者创建一个瞬态字段,并让它由dao填充。这样,您只需加载一次作者并多次访问该信息。

答案 1 :(得分:1)

我猜你正试图通过注释来做到这一点。您可以尝试在修改列表中设置@OrderBy,并让getAutor()函数检索第一个(或最后一个)实体。

虽然我更喜欢托马斯的方法,以便更好地分离出这种逻辑。