INSERT или UPDATE в таблице "user" нарушает ограничение внешнего ключа "fkjf7w******" Подробности: Ключ (id)=(1) отсутствует в таблице "landlord"
Программа и сервер(на Spring boot) запускается, но в консоли вижу ошибку:
Caused by: org.postgresql.util.PSQLException: ОШИБКА: INSERT или UPDATE в таблице "city" нарушает ограничение внешнего ключа "fktjrg7h2j3ehgycr3usqjgnc2u"
Подробности: Ключ (id)=(1) отсутствует в таблице "house"
Мне кажется, что связи некорректные, либо ещё что-то, но вариантов особо нет, даже догадаться не могу, потому что когда добавляю квартиру (подумал, что города как-то зависят от домов), то ошибка меняется в цифре, была (id)=(1), а становится (id)=(2).
HOUSE:
@Data
@Entity
@Table (name = "house", schema = "task")
public class House {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
// OnrToMany к городу
@OneToMany(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST,
CascadeType.REFRESH
})
@JoinColumn(name = "id")
private Set<City> city;
@Column(name = "id_landlord", nullable = false)
private Long id_landlord;
@Column(name = "outside", nullable = false)
private String outside;
@Column(name = "rooms", nullable = false)
private Integer rooms;
@Column(name = "price", nullable = false)
private Double price;
@Column(name = "description", nullable = false)
private String description;
}
CITY:
@Data
@Entity
@Table(name = "city", schema = "task")
public class City {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "id_region", nullable = false)
private Integer id_region;
@Column(name = "name", nullable = false)
private String name;
}
Ответы (2 шт):
Автор решения: Blacit
→ Ссылка
Всё оказалось проще, я неправильно сделал связи.
Вот так должно было быть:
public class House {
...
@ManyToOne(optional = false)
@JoinColumn(name = "city_id", referencedColumnName = "id")
private Set<City> city;
...
}
Автор решения: sardor khaydarov
→ Ссылка
@ManyToMany
@JoinTable(
name = "user_role",
joinColumns = {
@JoinColumn(name = "user_id", referencedColumnName = "id")},
inverseJoinColumns = {@JoinColumn(name = "role_name", referencedColumnName = "name")}
)
private Set<Role> roles = new HashSet<>();