Столбец OneToMany не обновляется при создании предприятий - PullRequest
0 голосов
/ 28 мая 2020

У меня две сущности / таблицы

Удалены некоторые столбцы для краткости

Группа:

@Entity
@Table(name = "groups", indexes = {@Index(name = "groups_index", columnList = "id", unique = true)})
public class Group implements Serializable {

    @OneToMany(targetEntity = UserInGroup.class, mappedBy = "group")
    private Set<UserInGroup> userInGroups = new HashSet<>();

}

UserInGroup:


@Entity
@Table(name = "user_in_group", indexes = {@Index(name = "user_in_group_index", columnList = "group_id,user_id", unique = true)})
public class UserInGroup implements Serializable {

    @ManyToOne
    @JoinColumn(name = "group_id", referencedColumnName = "id")
    private Group group;

}

Я сослался на эти ссылки 1 , 2 и 3 . Я сделал то, что они обрисовали в общих чертах

Теперь я делаю запись в таблице UserInGroup , но, тем не менее, сущность group не обновляется новыми записями сделано в таблице UserInGroup .

Creating entry in **UserInGroup**

Группа не обновляется

UserInGroups is still empty

Запись создана в UserInGroups Entry Created in UserInGroups

Запись создана в группах

Entry created in Groups


Изменить:

На основе этого ответа Я добавил следующее

UserInGroup userInGroup = new UserInGroup().setGroup(group).setUser(creatorUser).setGroupRoleEnum(GroupRoleEnum.ADMIN);
group.addUserInGroup(userInGroup);
groupRepository.save(group);
public void addUserInGroup(UserInGroup userInGroup) {
    if (userInGroups == null) {
        userInGroups = new ArrayList<>();
    }
    userInGroups.add(userInGroup);
    userInGroup.setGroup(this);
}

Но в таблице UserInGroup все еще нет записей.

1 Ответ

0 голосов
/ 28 мая 2020

В вашем коде, в ваших двунаправленных отношениях, вы отметили сущность Group как владеющую сторону отношения с помощью атрибута mappedBy. Таким образом, если вы используете экземпляр GroupRepository для распространения как значений Group, так и UserInGroup, все должно работать нормально. То есть вместо вызова save на экземпляре UserInGroupRepository используйте экземпляр GroupRepository для сохранения значения и ассоциация внешнего ключа должны создаваться автоматически. Используйте методы addUserInGroup(userInGroup) и removeUserInGroup() для добавления или удаления значений из набора в классе Group.

groupRepository.save(group);

Связанное сообщение для получения дополнительной информации: Проблема добавления Springboot в отношении oneTOMany

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