java – Criteria. DISTINCT_ ROOT_ Entity does not block duplicate objects

I have the following Dharma:

@Override
public List<AdminRole> findAll() {
    Session session = sessionFactory.getCurrentSession();
    Criteria criteria = session.createCriteria(AdminRole.class);
    criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
    return criteria.list();
}

Actually, I want to retrieve all entries from the database

Sometimes I see repetition This happens when I add users with adminrole

I've seen that it's possible. When I use eager to extract types, it should be repaired by adding the following lines:

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

But that doesn't help me

My mapping:

@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();
    }
}

and

@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;      
    //...
}

Attached:

I cannot switch the extraction type

I don't want to put this list together

Solution

There is no reason to use distinct_ ROOT_ Entity or anything similar, what you need is:

session.createCriteria(AdminRole.class).list();

If you repeat, then you really have a database Check the code that saves adminroles directly or cascade from other entities

When cascading persist / merge operations from other entities, ensure that the operations cascade to persistent / detached adminrole instances instead of temporary (New) instances

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>