【问题标题】:Cannot get ManyToMany to work with lists of items in Hibernate Criteria无法让 ManyToMany 使用 Hibernate Criteria 中的项目列表
【发布时间】:2016-05-01 17:15:24
【问题描述】:

我正在开发一个 Hibernate 应用程序,但在使用标准和搜索文章时遇到问题,这里是文章类:

@Entity
@Table(name="article")
public class Article {

    @Id
    @GeneratedValue
    private Integer articleId;
    @ManyToMany
    @JoinTable(
        name="ARTICLE_CATEGORY",
        joinColumns = @JoinColumn( name="ARTICLE_ID"),
        inverseJoinColumns = @JoinColumn( name="CATEGORY_ID")
    )
    private List<Category> categories;

}

这是分类:

@ManyToMany(mappedBy = "categories")
private Collection<Article> articles;

我使用条件搜索(类别是一个列表):

return sessionFactory
    .getCurrentSession()
    .createCriteria(Article.class)
    .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
    .add(Restrictions.in("categories",categories))
    .list()

但我收到以下错误:

错误:未设置参数“#1”; SQL语句:

我做错了什么?

【问题讨论】:

    标签: java sql hibernate orm criteria


    【解决方案1】:

    您需要按如下方式更改您的查询:

    1. 您从categories 列表中提取类别ID:

      List<Long> ids = categories.stream()
          .map(Category::getId)
          .collect(Collectors.toList());
      
    2. 然后将 ids 列表传递给 Criteria 查询:

      return sessionFactory
          .getCurrentSession()
          .createCriteria(Article.class)
          .createAlias("categories", "c")
          .add( Restrictions.in( "c.id", ids ) )
          .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
          .list();
      

    【讨论】:

      猜你喜欢
      • 2013-04-10
      • 1970-01-01
      • 1970-01-01
      • 2016-05-06
      • 1970-01-01
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      • 2020-03-13
      相关资源
      最近更新 更多