Playframework 2.0 Ebean查找器-选择被忽略
我正在开发一个play框架应用程序,其中包括ebean。所以我决定试一试。我有一个模型,其中我使用Playframework 2.0 Ebean查找器-选择被忽略,playframework-2.0,ebean,Playframework 2.0,Ebean,我正在开发一个play框架应用程序,其中包括ebean。所以我决定试一试。我有一个模型,其中我使用@Formula注释将一个和取到enty中,如下所示: @Entity public class Note extends Model { private static final long serialVersionUID = -2384288983980432586L; @Id @GeneratedValue(strategy = GenerationType.AUTO
@Formula
注释将一个和取到enty中,如下所示:
@Entity
public class Note extends Model {
private static final long serialVersionUID = -2384288983980432586L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(insertable = false, updatable = false)
private Long id;
@Transient
@Formula(select = "case a.upvotes when null then 0 else a.upvotes end case", join = "left outer join (select v.note_id, count(*) as upvotes from notevote v where v.noteval > 0 group by v.note_id) as a on a.note_id = ${ta}.id")
private Integer upvotes;
....
此查询将编译,除了upvoces
字段始终为空之外,其他一切似乎都正常工作。所以我在某个地方读到,每当我使用ebean.finder查询某个内容时,应该包括这个字段。因此,要获得id,我需要写:
Ebean.find(Note.class).select("id, upvotes").setId(id).findUnique();
而不是
Ebean.find(Note.class).setId(id).findUnique();
问题是,我在上面的选择部分中写了什么并不重要,它被忽略了。在进行任何更复杂的调试之前,请尝试删除@Transient annotation over up字段 发件人: 您还可以将瞬态注释与公式一起使用 注释。在这种情况下,瞬态注释的效果是 默认情况下,该公式不会包含在查询中 这样,您就不需要在select中明确提到它 如果没有帮助,请按照描述启用ebeansql日志,并查看是否执行了公式SQL
知道了这一点,我们将考虑下一步要做什么。我找到了一个ebean文档文件,其中有一个演示,演示了如何使用一个更简单的查询来实现这一点:
@Formula(select = "(select count(*) from Notevote v where v.noteval > 0 AND v.note_id = ${ta}.id)")
使用此语法并删除瞬态注释可以解决此问题。当我删除瞬态注释时,我也不必在每次读取实体时请求字段…感谢您查看它!我在下面贴了一个答案,为我解决了这个问题!