我正在进行一个查询,我需要返回一个用户,同时也填充了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);
答案 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);