Как обрабатывать отношения «многие ко многим» в Hibernate с не первичным ключом? - PullRequest
0 голосов
/ 25 января 2019

У меня есть два объекта - Роль и Привилегия. У них есть отношения многие ко многим. Код каждого объекта показан ниже.

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.NaturalId;

@Entity
@Table(name = "rml_privilege")
public class RmlPrivilege extends RmlBase implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = -6810028565979325754L;

    public static final String ATTR_NAME = "name";


    @Column(name="name",nullable=false,unique=true)
    private String name;

    @Column(name="description")
    private String description;

    public String getName() {
        return name;
    }

    public void setName(String privilege) {
        this.name = privilege;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

}

Это файл RmlRole.

import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name = "rml_role")
public class RmlRole extends RmlBase {

    public final static String ATTR_ORG = "org.id";

    @Column(name = "name")
    private String name;

    @Column(name = "description")
    private String description;

    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name = "organization")
    private RmlOrganization organization;

    //TODO: In case of LAZY loading, recieve an error
    @ManyToMany(cascade=CascadeType.PERSIST,fetch=FetchType.EAGER)
    @JoinTable(name = "rml_role_privilege", joinColumns = {
            @JoinColumn(name = "role", referencedColumnName = "id") }, inverseJoinColumns = {
                    @JoinColumn(name = "privilege", referencedColumnName = "name") })
    Set<RmlPrivilege> privileges;

    public RmlOrganization getOrganization() {
        return organization;
    }

    public void setOrganization(RmlOrganization organization) {
        this.organization = organization;
    }


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Set<RmlPrivilege> getPrivileges() {
        return privileges;
    }

    public void setPrivileges(Set<RmlPrivilege> privileges) {
        this.privileges = privileges;
    }

}

Когда я пытаюсь получить объект RmlRole, я получаю пустую переменную "Привилегии". Я ожидаю, что набор объектов привилегий подготовлен. Я делаю это где-то неправильно, но не могу определить.

Моя Hibernate версия: 5 Java 1.8 Приложение Spring Boot

Любая помощь будет принята с благодарностью.

...