Как добавить дочернюю сущность без родителя в двунаправленных отношениях OneToOne - PullRequest
0 голосов
/ 19 января 2019

У меня есть 2 объекта: группа и пользователь.Оба находятся в отношении OneToOne, Пользователь - родитель, а Группа - дочерний.

Проблема в том, что у меня возникает ошибка при сохранении объекта группы в базу данных: org.hibernate.id.IdentifierGenerationException: попытка присвоить идентификаториз нулевого свойства «один к одному» [com.robert.app.ws.io.entity.GroupEntity.user]

Групповой объект:

    public class GroupEntity {

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

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

@OneToMany(mappedBy = "group")
private List<ChildEntity> children;

//FK z tablicy users
@OneToOne
@MapsId
UserEntity user;

//getters and setters

Пользовательский объект:

    public class UserEntity implements Serializable {

private static final long serialVersionUID = 8748598732973872010L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

@Column(nullable = false)
private String userId;

@Column(nullable = false, length = 50)
private String firstName;

@Column(nullable = false, length = 50)
private String lastName;

@Column(nullable = false, length = 15)
@Enumerated(EnumType.STRING)
private Gender gender;

@Column(nullable = false, length = 20)
private String pesel;

@Column(nullable = false, length = 20)
@Enumerated(EnumType.STRING)
private AccountType accountType;

@Column(nullable = false, length = 60)
private String address;

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

private String encryptedPassword;

@OneToMany(cascade = CascadeType.ALL, mappedBy = "user", 
orphanRemoval = true)
private List<ChildEntity> children = new ArrayList<>();

@OneToOne(mappedBy = "user", cascade = CascadeType.ALL)
private GroupEntity group;

Класс GroupServiceImlp:

    @Override
    public GroupDto createGroup(GroupDto group) {

    GroupEntity groupEntity = new GroupEntity();
    BeanUtils.copyProperties(group, groupEntity);

    GroupEntity storedGroup = groupRepository.save(groupEntity);

    GroupDto returnValue = new GroupDto();
    BeanUtils.copyProperties(storedGroup, returnValue);

    return returnValue;
}

Я хочу создать группу и назначить пользователя этой группе позже (хотел бы сделать это в приложении для Android).У меня есть кнопка, где я просто добавляю новую группу в базу данных.С другой стороны, я хотел бы сопоставить определенную группу, которая уже создана, с пользователем.

Я уверен, что не понимаю что-то, связанное с отношениями в JPA, но я новичок в Spring, поэтому яищу помощи.

1 Ответ

0 голосов
/ 20 января 2019

Удалите @MapsId в GroupEntity

По умолчанию объекты отображаются по идентификаторам.Ваш GroupEntity должен выглядеть так.

public class GroupEntity {

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

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

    @OneToMany(mappedBy = "group")
    private List<ChildEntity> children;

    //FK z tablicy users
    @OneToOne
    UserEntity user;

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