У меня есть 3 объекта (A, B, C).B имеет PK, состоящий из 3 атрибутов, A имеет PK, состоящий из нескольких атрибутов, включая FK, который указывает на PK B.C имеет FK, который указывает на PK A, поэтому на него также необходимо ссылаться на PK B.У меня проблема с правильным объединением столбцов с помощью аннотаций Hibernate.
Мне нужно, чтобы идентификаторы были такими, как они есть в коде (поэтому я не могу использовать прогрессивные уникальные идентификаторы в качестве первичного ключа).Я покажу в коде, что я пытался.
ENTITY B:
@Entity
@Table(name = "APS_Lanes")
@IdClass(ApsLanesKey.class)
public class ApsLanes implements Serializable{
@Column(name = "Lane_ID", unique = true)
private Integer id;
@Id
@Column(name = "Store")
private String store;
@Id
@Column(name = "Area")
private Integer area;
@Id
@Column(name = "Lane")
private Integer lane;
ENTITY A:
@Entity
@Table(name = "Pallet_Place")
@IdClass(PalletPlaceKey.class)
public class PalletPlace implements Serializable{
@Id
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
@ManyToOne(targetEntity = ApsLanes.class, cascade = CascadeType.ALL, fetch=FetchType.LAZY)
@JoinColumns ({
@JoinColumn(name = "Store", referencedColumnName = ("Store")),
@JoinColumn(name = "Area", referencedColumnName = ("Area")),
@JoinColumn(name = "Lane", referencedColumnName = ("Lane"))
})
private ApsLanes aps_lane;
@Id
@Column(name = "Side")
private Integer side;
@Id
@Column(name = "N_Rack")
private Integer nrack;
@Id
@Column(name = "Level")
private Integer lvl;
@Id
@Column(name = "N_Slot")
private Integer nslot;
@Id
@Column(name = "Depth")
private Integer depth;
@Column(name = "Pallet_Place_ID", unique = true)
private Integer id;
ENTITY C:
@Entity
@Table(name = "Constraints")
public class Constraints {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "Constraints_ID")
private Integer id;
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
@ManyToOne(targetEntity = PalletPlace.class, cascade = CascadeType.ALL, fetch=FetchType.LAZY)
@JoinColumns ({
@JoinColumn(name = "Store", referencedColumnName = ("Store")),
@JoinColumn(name = "Area", referencedColumnName = ("Area")),
@JoinColumn(name = "Lane", referencedColumnName = ("Lane")),
@JoinColumn(name = "Side", referencedColumnName = ("Side")),
@JoinColumn(name = "N_Rack", referencedColumnName = ("N_Rack")),
@JoinColumn(name = "Level", referencedColumnName = ("Level")),
@JoinColumn(name = "N_Slot", referencedColumnName = ("N_Slot")),
@JoinColumn(name = "Depth", referencedColumnName = ("Depth"))
})
private PalletPlace pallet_place;
Я ожидаю, что приложение Spring запустит и загрузит базу данных с правильными таблицами и полями, однако первые 3 JoinColumn в третьей сущности вызывают «org.hibernate.AnnotationException»: referencedColumnNames из «Constraints.pallet_place», ссылаясь на «PalletPlace»не сопоставлено ни с одним свойством.