Playframework 2.0 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

我正在开发一个play框架应用程序,其中包括ebean。所以我决定试一试。我有一个模型,其中我使用
@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)")

使用此语法并删除瞬态注释可以解决此问题。当我删除瞬态注释时,我也不必在每次读取实体时请求字段…

感谢您查看它!我在下面贴了一个答案,为我解决了这个问题!