@OneToMany, błąd klucza obcego

0

Cześć, wrzucam najpierw kod,

User.java


    @Entity
    @Table(name = "person_table")
    public class User implements Serializable{
	
	@Id
	@GeneratedValue
	@Column(name = "person_id")
	private Long id;
	@Column(name = "person_name")
	private String name;
	@Column(name = "person_lastname")
	private String lastname;
	@Column(name = "person_details")
	@OneToMany(cascade = CascadeType.ALL), fetch = FetchType.EAGER, )
	//@JoinColumn(name = "id_details")
	private List<UserDetails> details = new ArrayList<>();

UserDetails.java


     @Entity
     @Table(name = "person_details")
     public class UserDetails implements Serializable{
	
	@Id
	@GeneratedValue
	@Column(name = "id_details")
	private Long id;
	@Column(name = "age_person")
	private int age;
	private String city;
	private String country;
	private int phoneNumber;
	@ManyToOne
	private User user;

przy próbie wpisania details do JSON w Postmanie, wyskakuje mi błąd:

org.postgresql.util.PSQLException: BŁĄD: wstawianie lub modyfikacja na tabeli "person_details" narusza klucz obcy "fknjo6gfexsn75l8d8c6l9twwue"
Szczegóły: Klucz (id_details)=(31) nie występuje w tabeli "person_table"

JSON:


   {
		"name":"Virgil",
		"lastname":"Van Dijk",
		 "details":[{
			"age":28,
			"city":"Rotterdam",
			"country":"Holland",
			"phoneNumber":726152927
		}]
	}

Miałby ktoś pomysł dlaczego postgres wywala mi takii błąd?

0

Takie uwagi moje:

  1. Jak używasz JPA to polecałbym unikać zależności dwukierunkowych. W UserDetails trzymałbym tylko id usera. Brakuje Ci też mappedBy.
  2. Jak używasz Postmana do wysyłania JSON'a to zakładam że masz REST API, czy używasz DTO?
  3. A tak serio to JPA jest ble, użyj czegoś innego.
0

Działa po dodaniu orphanRemoval = true przy @OneToMany,

    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
	private List<PersonDetails> details = new ArrayList<>();

Ale teraz inna sprawa, wcześniej zapisywało mi trwale w bazie danych PostgreSQL a teraz po zrestartowaniu serwera wszystkie poprzednie dane uciekają, jak zrobić żeby były one trwale zapisywane w bazie?

//EDIT

musiałem zmienić w properties
spring.jpa.hibernate = update

do zamknięcia

ps.nie wiem czemu ale zawsze gdy zadam pytanie na jakims forum to sam Od razu znajduje rozwiazanie :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1