Вам не нужно создавать отдельное поле «подписка» в классе VisitDate.Hibernate автоматически создаст поле для хранения идентификатора подписки.Код должен быть слегка изменен.
@Entity
@Table(name = "subscription")
public class Subscription {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
@Column(name = "subscription_id")
private long id;
@Column(name = "userid", nullable = false)
private String userId;
@Column(name = "saledate", nullable = false)
@Temporal(TemporalType.DATE)
private Date saleDate;
@Column(name = "finishdate", nullable = false)
@Temporal(TemporalType.DATE)
private Date finishDate;
@Column(name = "price", nullable = false)
private long price;
@Column(name = "description", nullable = false)
private String description;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "associatedSub")
private List<VisitDate> visitDates = new ArrayList<>();
}
Обратите внимание, что я изменил свойство mappedBy так, чтобы оно указывало на relatedSub в вышеприведенном классе.
@Entity
@Table(name="visitdate")
public class VisitDate {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
@Column(name = "id")
private long id;
@Column(name = "date", nullable = false)
@Temporal(TemporalType.DATE)
private Date date;
@ManyToOne
@JoinColumn(name="subscription_id")
private Subscription associatedSub;
}