【发布时间】:2016-01-12 16:15:00
【问题描述】:
我有以下 dao 方法:
@Override
public List<AdminRole> findAll() {
Session session = sessionFactory.getCurrentSession();
Criteria criteria = session.createCriteria(AdminRole.class);
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
return criteria.list();
}
实际上我想从数据库中检索所有条目。
有时我会看到重复项。当我使用 AdminRole 添加用户时会发生这种情况。
我已经读到,当我使用EAGER fetch 类型时它是可能的,这应该可以修复添加以下行:
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
但这对我没有帮助。
我的映射:
@Entity
@Table(name = "terminal_admin_role")
public class AdminRole {
@Id
@Column(name = "role_id", nullable = false, unique = true)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_id")
@SequenceGenerator(name = "user_id", sequenceName = "user_id")
private Long adminId;
@Column(name = "role")
private String role;
public AdminRole(String role) {
this.role = role;
}
public AdminRole() {
}
// get set
@Override
public String toString(){
return role;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof AdminRole)) {
return false;
}
AdminRole adminRole = (AdminRole) o;
if (!role.equals(adminRole.role)) {
return false;
}
return true;
}
@Override
public int hashCode() {
return role.hashCode();
}
}
和
@Entity
@Table(name = "terminal_admin")
public class TerminalAdmin {
@ManyToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL)
@JoinTable(name = "admin_role", joinColumns = {
@JoinColumn(name = "admin_id", nullable = false) },
inverseJoinColumns = { @JoinColumn(name = "role_id",
nullable = false) })
private Set<AdminRole> adminRoles;
//...
}
附言
我无法切换获取类型。
我不想将此列表放入集合中。
【问题讨论】:
-
我认为那是不同的,只是因为用户对象值不同。 AdminRole 将指向许多用户对象,因此具有相同值的 AdminRole 对象作为查询的结果出现,因为每个对象都有自己的用户对象并且用户对象值不同。
-
@Ry Kannan 你能建议解决问题的方法吗?
-
我认为您应该添加要选择不同的字段。 [链接]:(stackoverflow.com/questions/5196243/…)
-
“有时”是什么意思?您添加了一个具有管理员角色的用户,然后您在执行查询时总是看到重复?
-
@Dragan Bozanovic 实际上你是对的
标签: java hibernate orm criteria hibernate-criteria