Проблема отображения Hibernate: внешний ключ должен иметь то же количество столбцов, что и первичный ключ, на который ссылаются
Внешний ключ (FK300D262149997B:region_location [region])) должен иметь то же количество столбцов, что и указанный первичный ключ (region_location [region, location])
1). Создана таблица 'region' с двумя столбцами (первичный ключ и поле имени). 2). Создана таблица 'location' с двумя столбцами (первичный ключ и поле имени). 3). Создана таблица 'region_location' с тремя столбцами (первичный ключ, ссылка внешнего ключа таблицы 'region' и ссылка внешнего ключа таблицы 'location'). 4). Создана таблица 'Area' с тремя столбцами (первичный ключ, поле имени, ссылка на внешний ключ таблицы 'region_location' и поле имени).
/**
* Region model
*/
@Entity
@Data
@EqualsAndHashCode(of = "id")
@Table(name = "region")
public class Region {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Integer id;
@Column(name = "name")
@NotNull
@Size(min = 2, max = 255)
private String name;
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
@JoinTable(name = "region_location", joinColumns = @JoinColumn(name = "region", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "location", referencedColumnName = "id"))
private Set<Location> location;
}
/**
* Location model
*/
@Entity
@Data
@ToString
@EqualsAndHashCode(of = "id")
@Table(name = "location")
public class Location {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Integer id;
@Column(name = "name")
@NotNull
@Size(min = 2, max = 255)
private String name;
@Column(name = "pin_code")
@NotNull
@Min(value = 100000)
@Max(value = 999999)
private Integer pinCode;
@ManyToMany(mappedBy = "location", fetch = FetchType.EAGER)
private Set<Region> region;
}
/**
* Region Location model
*/
@Entity
@Data
@ToString
@EqualsAndHashCode(of = "id")
@Table(name = "region_location")
public class RegionLocation {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Integer id;
@ManyToOne(optional = false, fetch = FetchType.EAGER)
@JoinColumn(name = "location")
private Location location;
@ManyToOne(optional = false, fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "region")
private Region region;
}
/**
* Area model
*/
@Entity
@Data
@ToString
@EqualsAndHashCode(of = "id")
@Table(name = "area")
public class Area {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Integer id;
@Column(name = "name")
private String name;
/**
** problem code
**/
@ManyToOne(optional = true, fetch = FetchType.EAGER)
@JoinColumn(name = "region_location")
private RegionLocation regionLocation;
}
Когда я пытаюсь выполнить тестирование с основным классом, я получаю ошибку отображения, такую как ошибка отображения гибернации, например, внешний ключ (FK5110401A8398947:area [region_location_id])) должен иметь такое же количество столбцов, что и первичный ключ, на который есть ссылка (region_location [region_id, location_id])).
Я знаю, что ошибка возникает в таблице областей, когда я сопоставил таблицу region_location в области. Как я могу заставить это работать?
заранее спасибо