如何解决使用条件的多对多模型将获得重复的行;为什么?
我正在使用数据透视表创建与休眠的多对多关系。
我创建了三个名为Requirement
,Collaboration
和CollaborationRequirement
的模型,其中CollaborationRequirement
是我的数据透视表。
public class Requirement {
@Id
private Long id;
@OneToMany(mappedBy = "requirement",fetch = FetchType.EAGER,cascade = javax.persistence.CascadeType.ALL)
private Set<CollaborationRequirement> collaborationRequirement = new HashSet<CollaborationRequirement>();
}
public class Collaboration {
@Id
private Long id;
@OneToMany(mappedBy = "collaboration",cascade = javax.persistence.CascadeType.ALL)
private Set<CollaborationRequirement> collaborationRequirements = new HashSet<CollaborationRequirement>();
}
public class CollaborationRequirement {
@Id
private Long id;
@ManyToOne(cascade = CascadeType.ALL)
private Requirement requirement;
@ManyToOne(cascade = CascadeType.ALL)
private Collaboration collaboration;
}
现在,当我想从“需求”表中选择所有行时,会得到重复的数据(恰好是CollaborationRequirement表中具有该需求ID的行数)。
RequirementDao:
public List<Requirement> findAll() {
Session session = getSession();
try {
Criteria criteria;
criteria = session.createCriteria(Requirement.class,"requirement");
criteria.add(Restrictions.sqlRestriction("1=1"));
criteria.addOrder(Order.desc("id"));
List<Requirement> result = criteria.list();
return result;
} finally {
session.close();
}
}
所以我的问题是,为什么会出现这个问题?以及如何解决?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。