你好,当我在两个实体(其中一个具有复合主键)之间执行JoinTable时,我无法理解错误。
我的实体:
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "meds")
public class Meds {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column
private String name;
@Column
private BigDecimal price;
@Column
private String category;
@Column
private int pillNumber;
@Column
private Date date;
@JsonIgnore
@ManyToMany(mappedBy = "assignedMeds")
private Set<Plans> plans = new HashSet<>();
}
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "plans")
@IdClass(PlansPKId.class)
public class Plans {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long planId;
@Id
@Column
private Date planDate; // format: yyyy-mm-dd
@Column
private String planName;
@Column
private String weekday;
@ManyToMany
@JoinTable(name = "Plan_Meds", joinColumns = @JoinColumn(name = "planDate", referencedColumnName = "planId"), inverseJoinColumns = @JoinColumn(name = "id"))
private Set<Meds> assignedMeds = new HashSet<>();
}
我的计划PKId类:
@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
public class PlansPKId implements Serializable {
private long planId;
private Date planDate; // format: yyyy-mm-dd
}
和我的错误:
我尝试了@JoinColumn(name=“planDate”,referencedColumnName=“planId”),也尝试了其他方法,首先使用planId,但发生了同样的事情。可能出了什么问题?当做
对在计划类中使用复合Id不感兴趣:计划ID已经是唯一的并由数据库生成。但这不是问题所在,您需要映射所有列ids planDate和planId。
@ManyToMany
@JoinTable(name = "Plan_Meds", joinColumns = {
@JoinColumn(name = "planDate", referencedColumnName = "planDate")
@JoinColumn(name = "planId", referencedColumnName = "planId")
}, inverseJoinColumns = @JoinColumn(name = "id"))
private Set<Meds> assignedMeds = new HashSet<>();