在playframework中查找JPA失败

在playframework中查找JPA失败,playframework,Playframework,我在PlayFramwork中使用JPA 我有一个带有HashSet字段的类页面 Set<PageStatus> pageStatus= new HashSet<PageStatus>(); status是包含这些代码的哈希集 Set<PageStatus> statuses = new HashSet<PageStatus>(); statuses.add(PageStatus.LATEST); Set status=newhashset()

我在PlayFramwork中使用JPA

我有一个带有HashSet字段的类页面

Set<PageStatus> pageStatus= new HashSet<PageStatus>();
status是包含这些代码的哈希集

Set<PageStatus> statuses = new HashSet<PageStatus>();
statuses.add(PageStatus.LATEST);
Set status=newhashset();
状态。添加(PageStatus.LATEST);

有什么建议吗?谢谢。

不能将集合用作like子句的参数。like需要一个字符串作为参数。唯一可以使用Set的子句是子句中的

问题是您试图通过M-N关系进行过滤。也就是说,一边是a组,另一边是B组

  • 中的
    不起作用,因为它用于确定单个元素位于元素集合中。Like:元素x在给定的{array,list,set}z中。在您的场景中,您有2套,这将不起作用
    
  • Like
    直接比较字符串。例如,字符串a类似于字符串B。您有两个集合,它也不起作用
  • 从您的示例中,您希望通过实体集合中的元素进行过滤。试试这个:

    PageStatus statuses = PageStatus.LATEST;
    Page.find("(?1) in pageStatus", statuses).fetch()
    

    如果要按多个元素进行筛选,则必须将筛选器与

    连接起来。我在子句中尝试过,但也失败了。find(“pageStatus in?”,status)在我的例子中,它在编写find(“from Page Page where Page.pageStatus in(?1)”,pageStatus.fetch()时起作用;页面状态在一个列表后面。但是,like和in的含义不同,请确保您编写的请求符合您的要求,但是它也不起作用……我用@ElementCollection注释此字段是否有问题?
    PageStatus statuses = PageStatus.LATEST;
    Page.find("(?1) in pageStatus", statuses).fetch()