Hibernate查询无法在一对多中正确投影

时间:2011-04-08 05:03:48

标签: hibernate criteria one-to-many

我正在进行一个查询,我需要返回一个用户,同时也填充了UserConnectors。我的查询不断返回两个结果,而不是一个ID。它应该是一个结果,但我认为UserConnector加入,因为用户有两个,在结果中创建两个用户,每个用户连接器一个。

用户:ID NAME UserConnector:ID,USERID,DATE

User.java

@OneToMany(mappedBy="user")
     public Set<UserConnector> getUserConnectors() {
        return this.userConnectors;
     }

    /**
     * Set the list of Connectors
     */
     public void setUserConnectors(Set<UserConnector> userConnectors) {
        this.userConnectors = userConnectors;
     }

UserConnector.java

@ManyToOne
@JoinColumn(name = "USERID")
public User getUser() {
    return this.user;
}

/**
 * set users
 */
public void setUser(User user) {
    this.user = user;
}

查询

Criteria criteria = userRepository.getCritieria();

            criteria.createAlias("userConnectors", "uc", Criteria.LEFT_JOIN);

            criteria.add(Restrictions.eq("id", request.getId()));
            criteria.add(Restrictions.eq("enabled", new Long("1")));
            criteria.add(Restrictions.eq("uc.active", new Long("1")));

            List<User> list = userRepository.findByCriteria(criteria);

3 个答案:

答案 0 :(得分:0)

你能试试吗?

  List users = session.createCriteria(User.class)
  .add( Restrictions.idEq(request.getId()))
  .add( Restrictions.eq("enabled", new Long("1")))
  .createCriteria("userConnectors")
      .add( Restrictions.like("active", new Long("1")) )
  .list();

答案 1 :(得分:0)

与HQL一样,对于带有连接的Criteria,您需要手动触发不同的投影:

 criteria.setResultTransformer(DistinctRootEntityResultTransformer.INSTANCE);

答案 2 :(得分:0)

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);