Mam dziwny problem z Hibernate.
Przykładowo jest grupa, do której należą członkowie. Tabela z członkami nie ma swojego id z auto incrementem, dlatego jest założony pk na dwie kolumny. Tego nie zmienię bo nie mogę edytować bazy. Encje wyglądają tak:
@Entity
@Table(name = "group")
@Data
public class Group implements Serializable {
@Column(name = "id")
@Id
@SequenceGenerator(name = "group_seq", sequenceName = "group_seq", allocationSize = 1)
@GeneratedValue(generator = "group_seq", strategy = GenerationType.SEQUENCE)
private Long id;
@NotNull
private String name;
@OneToMany
@JoinColumn(name = "group_id")
@BatchSize(size = 25)
private final List<Member> members = new ArrayList<>();
}
@Data
@Entity
public class Member implements Serializable {
@Id
@Column(name = "group_id")
private Long groupId;
@Id
@NotNull
private String username;
@NotBlank
private String description;
}
wartości przed zapisem to coś takiego:
{
id: null,
name: "abc",
members: [
{
group_id: null,
username: "cat",
description: "abc"
},
{
group_id: null,
username: "dog",
description: "cba"
}
]
}
Używam GroupRepository extends JpaRepository
i zapisuję tak: groupRepository.save(group);
Błąd jaki dostaję:
Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; nested exception is org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
Dodałem logowanie sql w konsoli i widzę, że insert dla grupy leci prawidłow, ale dla membera już nie:
update member set group_id=2 where group_id=null and description=abc
Nie mam pojęcia dlaczego próbuje zapisywać przez update i w dodatku group_id jest nullem, pomimo tego, że zna jego wartość...