【问题标题】:Play!Framework : using find() model method on a collectionPlay!Framework : 在集合上使用 find() 模型方法
【发布时间】:2011-09-05 11:27:16
【问题描述】:

让我们假设一个包含这些字段的 User 类:

@Entity
public class User extends Model {
    public String email;
    public String password;
    @ElementCollection
    public List<String> stringList;
}

我正在寻找一种方法来执行数据库请求,以查找在其 stringList 中具有给定字符串的所有用户,例如

List<User> usersHelloWorld = User.find("byStringList", "HelloWorld").fetch();

当然,这是行不通的。有什么办法让它工作吗?

编辑:

这是我的实际类字段:

@Entity
public class User extends Model {
    public String email;
    public String password;
    public String firstname;
    public String lastname;
    public String gender;
    public String fbId;
    public String googleId;
    @ElementCollection
    public List<String> eventTopicIds;
    @Transient
    UserEventBuffer eventBuffer;
    @Transient
    public String fbAccessToken;
    public String googleAccessToken;
}

有了这个要求:

List<User> u = User.find("SELECT u from User u where ? IN u.eventTopicIds", "internalns_rootTopic1").fetch();

我得到了那个错误:

JPAQueryException 发生: 执行查询 SELECT u 时出错 来自用户 u 哪里? IN u.eventTopicIds:SQL 语句中的语法错误 “选择 USER0_.ID 作为 ID3_、USER0_.EMAIL 作为 EMAIL3_、USER0_.FBID 作为 FBID3_,USER0_.FIRSTNAME 作为 FIRSTNAME3_,USER0_.GENDER 作为 GENDER3_, USER0_.GOOGLEACCESSTOKEN 为 GOOGLEAC6_3_,USER0_.GOOGLEID 为 GOOGLEID3_, USER0_.LASTNAME AS LASTNAME3_, USER0_.PASSWORD AS PASSWORD3_ FROM USER USER0_ CROSS JOIN USER_EVENTTOPICIDS EVENTTOPIC1_ WHERE USER0_.ID=EVENTTOPIC1_.USER_ID AND (? IN (.[*])) "; 预期 “不,存在,选择,从”; SQL语句:选择user0_.id为id3_, user0_.email 作为 email3_,user0_.fbId 作为 fbId3_,user0_.firstname 作为 firstname3_,user0_.gender 作为gender3_,user0_.googleAccessToken 作为 googleAc6_3_,user0_.googleId 为 googleId3_,user0_.lastname 为 lastname3_, user0_.password as password3_ from User user0_ cross join User_eventTopicIds eventtopic1_ where user0_.id=eventtopic1_.User_id 和 (? in (.)) [42001-149]

【问题讨论】:

    标签: java collections model playframework find


    【解决方案1】:

    通常你应该能够像这样运行 JPA 查询

    User.find("Select u from User as u inner join u.stringList as strings where ? in strings", "HelloWorld").fetch();
    

    做了一个小测试,我的对象有电子邮件而不是字符串,但应该是一样的,除非你遇到一些保留字。问题不在于 in 关键字,我必须内连接 stringList 才能使用 in 关键字。前面的标记有点快:)

    希望这会有所帮助。

    【讨论】:

    • 感谢您的回答,但 JPA 似乎对我认为的 IN 关键字不满意,以查看错误消息。我编辑我的问题以放置错误消息和我的实际用户类和请求
    • 我编辑了我的回复,我想上面的解决方案应该适合你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多