java – Criteria.DISTINCT_ROOT_ENTITY不会阻止重复的对象
发布时间:2020-12-14 17:46:49 所属栏目:Java 来源:网络整理
导读:我有以下道法: @Overridepublic ListAdminRole findAll() { Session session = sessionFactory.getCurrentSession(); Criteria criteria = session.createCriteria(AdminRole.class); criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); retur
我有以下道法:
@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提取类型,这应该是修复添加以下行: 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; //... } 附: 我无法切换提取类型. 我不想把这个列表放在一起. 解决方法
没有理由使用DISTINCT_ROOT_ENTITY或任何类似的东西,你需要的是:
session.createCriteria(AdminRole.class).list(); 如果你重复,那么你真的有数据库.检查直接或从其他实体级联保存AdminRoles的代码. 当从其他实体级联PERSIST / MERGE操作时,请确保操作级联到持久/分离的AdminRole实例,而不是临时(新的)实例. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |