Проблема с сохранением данных в таблицах ManyToMany, hibernate, spring - PullRequest
1 голос
/ 01 июля 2019

Ниже - родительская таблица - пользователи:

@Entity
@Table(name = "user")
public class User {

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "username", length = 50, unique = true)
    @NotNull
    @Size(min = 4, max = 50)
    private String username;

    @Column(name = "password", length = 100)
    @NotNull
    @Size(min = 4, max = 100)
    private String password;

    @ManyToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER)
    @JoinTable(
            name = "user_role",
            joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id")},
            inverseJoinColumns = {@JoinColumn(name = "role_id", referencedColumnName = "id")})
    private List<Role> roles;


//constructor, getters/setters

Ниже вы можете найти таблицу с ролями:

@Entity
@Table(name = "role")
public class Role {

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name", length = 50)
    @NotNull
    @Enumerated(EnumType.STRING)
    private RoleName name;

    @ManyToMany(mappedBy = "roles", fetch = FetchType.LAZY)
    private List<User> users;

//constructor, getters/setters

И я постараюсь сохранить пользователя методом ниже:

private static SessionFactory sessionFactory;
private Session session;


    @Override
    public void saveUser(User user) {
        Role role = getRoleByName(RoleName.ROLE_ADMIN);
        user.getRoles().add(role );
        role.getUsers().add( user );
        session.persist(user);
    }

    public Role getRoleByName(RoleName name) {

        Query query = session.createQuery("SELECT r FROM Role r WHERE r.name= :name");
        query.setParameter("name", name);
        return (Role) query.uniqueResult();
    }

Но у меня есть две проблемы: - первая - главная проблема - я сделал что-то не так и не могу сохранить нового пользователя. - второй - у меня нулевой результат в результате запроса в getRoleByName, но, конечно, эта роль существует в таблице user_roles.

И любое решение будет для меня идеальным.

Заранее спасибо.

1 Ответ

0 голосов
/ 02 июля 2019

Хорошо, текущая ситуация довольно крутая!

@Override
    public void saveUser(User user) {
        Session currentSession = entityManager.unwrap(Session.class);
        Role role = getRoleByName(RoleName.ROLE_ADMIN);
        user.getRoles().add(role );
        role.getUsers().add( user );
        currentSession.persist(user);
    }

    public Role getRoleByName(RoleName name) {
        Session currentSession = entityManager.unwrap(Session.class);
        Query query = currentSession.createQuery("SELECT r FROM Role r WHERE r.name= :name");
        query.setParameter("name", name);
        return (Role) query.uniqueResult();
    }

Но все равно не сохраняйте в БД.Нет ошибокЕсть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...