Java 玩框架:对集合使用find()模型方法

Java 玩框架:对集合使用find()模型方法,java,collections,model,playframework,find,Java,Collections,Model,Playframework,Find,让我们假设一个用户类包含这些字段: @Entity public class User extends Model { public String email; public String password; @ElementCollection public List<String> stringList; } @实体 公共类用户扩展模型{ 公共字符串电子邮件; 公共字符串密码; @元素集合 公开名单; } 我正在寻找一种方法来执行一个数据库请求

让我们假设一个用户类包含这些字段:

@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();
List 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;
}
@实体
公共类用户扩展模型{
公共字符串电子邮件;
公共字符串密码;
公共字符串名;
公共字符串lastname;
社会性别;
公共字符串fbId;
公共字符串googleId;
@元素集合
公共事件列表;
@短暂的
usereventbuffereventbuffer;
@短暂的
公共字符串标记;
公共字符串googleAccessToken;
}
根据这项请求:

List<User> u = User.find("SELECT u from User u where ? IN u.eventTopicIds", "internalns_rootTopic1").fetch();
List u=User.find(“从u.EventTopicId中的用户u where?中选择u”,“internalns\u rootTopic1”).fetch();
我得到了这个错误:

JPAQueryException发生:执行查询选择u时出错 从用户u到哪里?在u.eventTopicIds中:SQL语句中的语法错误 “选择USER0\u0.ID作为ID3\u0,USER0\u0.EMAIL作为EMAIL3\u0,USER0\u0.FBID作为” FBID3,USER0,FIRSTNAME作为FIRSTNAME3,USER0,GENDER作为GENDER3, USER0\u0.GOOGLEACCESSTOKEN作为GOOGLEAC6\u3\u0.GOOGLEID作为 GOOGLEID3,USER0,LASTNAME为LASTNAME3,USER0,密码为 密码3_uu来自用户用户0_uu交叉加入用户\u EVENTTOPICIDS EVENTTOPIC1_ 其中USER0.ID=EVENTTOPIC1.USER\u ID和(?IN(.[*])”;预期 “不存在、存在、选择、来自”;SQL语句:选择user0\u0.id作为id3\u0, user0\u0.email作为email3\u0,user0\u0.fbId作为fbId3\u0,user0\u0.firstname作为 firstname3,user0,性别为gender3,user0,googleAccessToken为 googleAc6_3_,user0_。googleId为googleId3_,user0_。lastname为 lastname3,user0。密码为password3,来自用户user0交叉连接 User\u eventTopicIds eventtopic1\u其中user0\u.id=eventtopic1\u.User\u id 和(?in(.)[42001-149]


通常情况下,您应该能够运行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关键字不满意,因为看到了错误消息。我编辑我的问题是为了显示错误消息和我的实际用户类和请求。我编辑了我的回答,我想上面的解决方案应该适合您。