【发布时间】:2012-02-05 03:26:59
【问题描述】:
我有一个模型类Alert与另一个模型类Occurrence有一对多的关系,如下:
@Entity public class Alert extends Model
{
public String name;
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="alert")
public List<Occurrence> occurrences;
}
@Entity public class Occurrence extends Model
{
@ManyToOne
public Alert alert;
@Column(nullable=false)
public Date alertTime;
}
我有一个视图,它在一个简单的表格中列出了警报,该表格应该有一个标记为“今天发生”的列,并计算今天发生了多少次警报(alertTime)。
我似乎无法找到仅使用 Alert 模型类中的 JPA/Hibernate 注释来执行此操作的方法,并且由于我列出了警报,因此我不知道将计数包含在其中的干净方法每个Alert 对象。
所以现在我想知道是否可以简单地从Alert 模型类本身的内查询警报的出现,如下所示:
@Entity public class Alert extends Model
{
public String name;
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="alert")
public List<Occurrence> occurrences;
@Transient
public long getOccurrencesToday()
{
return Occurrence.count(
"alert = ? and alertTime >= ?",
this, new DateMidnight().toDate());
}
}
我的问题是:从模型类中查询数据库是否被认为是不好的形式?
第二个问题是:我是不是以错误的方式处理这个问题?有没有更好的方法来实现我错过的最终结果?
【问题讨论】:
-
澄清:我对从模型类中执行查询的担忧是,当控制器类缓存模型实例时,它可能无法获得预期的行为。也就是说,控制器认为它正在从缓存中获取稍微旧的数据,而实际上每次都从数据库中获取某些属性。此外,重复访问该属性的视图可能会导致不明显的性能损失。
标签: jpa playframework