Добавить связь к промежуточной таблице

21
26 июня 2019, 05:30

Возникла проблема с добавлением роли к аккаунту.

Есть три таблицы : auth_accaunt auth_accaunt_role auth_role

Связь между ними Many to many. При добавлении роли в коллекцию, связь между аккантом и ролью в промежуточную таблицу не добавляется. Сам аккаунт создается, но не устанавливается связь с ролями для него. Подскажите пожалуйста, что необходимо выполнить.

Часть кода из контроллера:

@RequestMapping(value = "/registration", method = RequestMethod.POST)
    public String registerUserAccount(
        @ModelAttribute("accaunt") Accaunt accaunt, 
        @ModelAttribute("role") String roleStr
    ){
        Role role = roleDAO.getId(Integer.valueOf(roleStr));
            Set<Role> roles = new LinkedHashSet<>();
            roles.add(role);
        accaunt.getRoles().add(role);
        accauntDAO.save(accaunt);
        return "redirect:/login";
    }

Сущность accaunt:

@Entity
@Table(name = "auth_accaunt")
public class Accaunt implements Serializable {
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer id;
    @Column(name = "login")
    private String login;
    @Column(name = "password")
    private String password;
    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(
        name = "auth_accaunt_role", 
        joinColumns = {
            @JoinColumn(name = "id_accaunt")
        },
        inverseJoinColumns = {
            @JoinColumn(name = "id_role")
        }
    )
    private Set<Role> roles = new LinkedHashSet<>();
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="id_user")
    private User user;
    public Accaunt() {}
    public Integer getId() {
        return id;
    }
    public String getLogin() {
        return login;
    }
    public String getPassword() {
        return password;
    }
    public Set<Role> getRoles() {
        return roles;
    }
    public User getUser() {
        return user;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public void setLogin(String login) {
        this.login = login;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public void setRoles(Set<Role> roles) {
        this.roles = roles;
    }
    public void setUser(User user) {
        this.user = user;
    }
}

Сущность ROLE

@Entity
@Table(name = "auth_role")
public class Role implements Serializable{
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer id;
    @Column(name = "name")
    private String name;
    public Role() {}
    public Integer getId() {
        return id;
    }
    public String getName() {
        return name;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return name;
    }
}
Answer 1

Ошибка из-за моей невнимательности... Оказалось дело вообще не в маппинге...

Было:

@Override
    public Role getId(Integer id) {
        Role role = null;
        try (Session session = sessionFactory.openSession()) {
            session.beginTransaction();
            session.get(Role.class, id);
            session.getTransaction().commit();
        }
        return role;
    }

Стало:

@Override
    public Role getId(Integer id) {
        Role role;
        try (Session session = sessionFactory.openSession()) {
            session.beginTransaction();
            role = session.get(Role.class, id);
            session.getTransaction().commit();
        }
        return role;
    }
READ ALSO
Почему Spring Data делает лишние запросы?

Почему Spring Data делает лишние запросы?

Есть следующий метод JPA репозитория:

31
Закрепить приложение на Android

Закрепить приложение на Android

День! Есть планшет на android с установленным на нём приложением обратной связиСуть такая - лежит такой планшет на кассе в магазине и каждый желающий...

28
Почему не конвертирует

Почему не конвертирует

Ребята я создал конвертор с кириллицы на латиницуНиже предоставил код, он не выдает ошибку правильно компилирует

28
Spring Integration. Пакетная запись JPA сущностей в БД

Spring Integration. Пакетная запись JPA сущностей в БД

В проекте на Spring Integration есть канал, в который поступают JPA сущности и записываются в БД при помощи jpa outbound channel adapterНо jpa outbound channel adapter пишет сущности...

24