让我们假设一个带有theese字段的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 AS ID3_,USER0_.EMAIL AS EMAIL3_,USER0_.FBID AS
  FBID3_,USER0_.FIRSTNAME作为FIRSTNAME3_,USER0_.GENDER AS GENDER3_,
  USER0_.GOOGLEACCESSTOKEN AS GOOGLEAC6_3_,USER0_.GOOGLEID AS
  GOOGLEID3_,USER0_.LASTNAME作为LASTNAME3_,USER0_.PASSWORD AS
  PASSWORD3_来自USER USER0_交叉加入USER_EVENTTOPICIDS EVENTTOPIC1_
  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为
  用户user0_交叉加入中的lastname3_,user0_.password作为password3_
  User_eventTopicIds eventtopic1_,其中user0_.id = eventtopic1_.User_id
  和(?中的(。))[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关键字。较早一点的标记:)

希望这可以帮助。

10-08 16:10