Проблема отображения Hibernate: внешний ключ должен иметь то же количество столбцов, что и первичный ключ, на который ссылаются - PullRequest
0 голосов
/ 22 января 2019

Внешний ключ (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 в области. Как я могу заставить это работать?

Заранее спасибо

...