Hibernate: сохранение сущности с двунаправленным сопоставлением «многие к одному» с таблицей соединений - org.hibernate.PropertyValueException - PullRequest
0 голосов
/ 06 февраля 2020

Здравствуйте, я пытаюсь сохранить одну из моих сущностей "Роль", которая имеет отношение многие-к-одному через таблицу соединения с моей другой сущностью "Пользователь". Однако каждый раз, когда я пытаюсь вставить роль без каких-либо пользователей, я получаю следующую ошибку: org.hibernate.PropertyValueException: свойство not-null ссылается на нулевое или временное значение. Моя сущность Роль сопоставляется с пользователем:

@ManyToOne(fetch = FetchType.LAZY, cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH,
            CascadeType.DETACH })
    @JoinTable(name = "t_UserRoles", joinColumns = {
            @JoinColumn(name = "cUserRolesRoleId", referencedColumnName = "cRoleId") }, inverseJoinColumns = {
                    @JoinColumn(name = "cUserRolesUserId", referencedColumnName = "cUserId") })
    private User user;

И мой пользователь с ролью:

@OneToMany(cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.DETACH })
    @JoinTable(name = "t_UserRoles", joinColumns = {
            @JoinColumn(name = "cUserRolesUserId", referencedColumnName = "cUserId") }, inverseJoinColumns = {
                    @JoinColumn(name = "cUserRolesRoleId", referencedColumnName = "cRoleId") })
    private Set<Role> roles;

код, который выдает исключение:

...
Role newRole = new Role();
            newRole.setRoleName(roleName);
            roleAfterSave = manager.merge(newRole);
            manager.getTransaction().commit();

Цель чтобы иметь возможность сохранить роль без необходимости создания пользовательского экземпляра. Вещи, которые я уже пробовал:

@ ManyToOne (необязательно = true, ...

@ JoinColumn (name = "cUserRolesRoleId", referencedColumnName = "cRoleId", nullable = true)

Скажите, если вам понадобится больше кода! Заранее спасибо за помощь!

1 Ответ

0 голосов
/ 06 февраля 2020

Прежде всего, есть ли какая-либо причина иметь таблицу соединения при отношении один-ко-многим?

Я думаю, что либо должна быть таблица «Определение роли», в которой определены типы ролей. , но тогда сущность Role не должна быть связана с конкретным пользователем. Отношения должны быть довольно много ко многим. Для меня это имеет больше смысла.

Или сущность Роль действительно связана с пользователем, но тогда я бы пропустил таблицу соединений.

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