2 回答
TA贡献1744条经验 获得超4个赞
您不需要在 VisitDate 类中创建单独的字段“订阅”。Hibernate 会自动创建一个字段来存储订阅 ID。代码需要稍作改动。
@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 属性更改为指向上述类中的 associatedSub。
@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;
}
TA贡献1803条经验 获得超6个赞
您可以将单向关系用于相同目的。您只需要为特定订阅添加访问列表/组,您不必为特定访问创建订阅列表。供参考访问 [Java JPA] :( https://en.wikibooks.org/wiki/Java_Persistence/OneToMany#Undirectional_OneToMany.2C_No_Inverse_ManyToOne.2C_No_Join_Table_.28JPA_2.0_ONLY.29)!
@Entity
@Table(name = "subscription")
@Proxy(lazy = false)
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 = "subscription")
private List<VisitDate> visitDates = new ArrayList<>();
}
@Entity
@Table(name="visitdate")
public class VisitDate {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "id")
private long id;
private long subscription;
@Column(name = "date", nullable = false)
@Temporal(TemporalType.DATE)
private Date date;
}
添加回答
举报
