Java Hibernate OneToMany映射-保存实体集的位置?
我有两个名为Java Hibernate OneToMany映射-保存实体集的位置?,java,hibernate,orm,hibernate-annotations,Java,Hibernate,Orm,Hibernate Annotations,我有两个名为Customer和Activity的实体类 客户拥有客户ID,客户名称,活动这里活动持有一组活动对应于每个客户,由@OneToMany(mappedBy=“Customer”)关系映射 Customer类定义如下(为了清晰起见,我删除了其他字段和一些getter和setter): 在保存新的活动之前,我将此活动添加到客户的活动集合中 我想知道: 客户的活动将保存在哪里 这两个实体的更新和删除操作将如何相互影响 这是创建@OneToMany和@manytone关系的正确方法吗 我可以
Customer
和Activity
的实体类
客户
拥有客户ID
,客户名称
,活动
这里活动
持有一组活动
对应于每个客户
,由@OneToMany(mappedBy=“Customer”)
关系映射
Customer
类定义如下(为了清晰起见,我删除了其他字段和一些getter和setter):
在保存新的活动
之前,我将此活动
添加到客户
的活动
集合中
我想知道:
- 客户的
活动
将保存在哪里
- 这两个实体的更新和删除操作将如何相互影响
- 这是创建
和@OneToMany
关系的正确方法吗@manytone
- 我可以在
活动中添加列名吗
提前感谢。-客户的活动在哪里保存? 它们不会在数据库中的任何位置保存为“客户的活动”。当需要客户的活动时,使用
customer\u id
列上的联接查询将其与客户一起加载,或者稍后使用过滤customer\u id
列的单独查询将其加载(延迟加载)
-两个实体的更新和删除操作将如何相互影响?
删除活动不会影响客户,但下次加载其活动时,删除的活动将不再是集合的一部分
如何使用@ManyToOne
上的cascade属性定义客户活动的删除,例如:
@OneToMany(mappedBy=“customer”,cascade=CascadeType.REMOVE)
基本上,所需的行为取决于活动是否可以在没有客户的情况下独立存在:如果是,则可以删除客户,并且活动表上的customer\u id
字段可以设置为null。否则,属于客户的活动将被“级联删除”。或者,在客户先删除其所有活动之前,无法删除客户
-这是创建@OneToMany和@manytone关系的正确方式吗?
是的,没错
-我可以添加活动的列名吗?
不,这没有任何意义。列只能包含一个ID,而活动是一个集合
我希望这会有所帮助。这些示例必须有助于理解您想要了解的一些功能
@javax.persistence.Entity
@Table(name = "CUSTOMER")
public class Customer extends Entity {
private String customerId;
private String customerName;
private Set<Activity> activities;
@NaturalId
@Column(name = "CUSTOMER_ID", nullable = false)
public String getCustomerId() {
return customerId;
}
@Column(name = "CUSTOMER_NAME", nullable = false)
public String getCustomerName() {
return customerName;
}
@OneToMany(mappedBy = "customer", fetch = FetchType.LAZY)
@Cascade(CascadeType.SAVE_UPDATE)
public Set<Activity> getActivities() {
return activities;
}
}
@javax.persistence.Entity
@Table(name = "ACTIVITY")
public class Activity extends Entity {
private String activityId;
private String activityName;
private Customer customer;
@NaturalId
@Column(name = "ACTIVITY_ID", nullable = false)
public String getActivityId() {
return activityId;
}
@Column(name = "ACTIVITY_NAME", nullable = false)
public String getActivityName() {
return activityName;
}
@ManyToOne
@JoinColumn(name = "CUSTOMER_ID", nullable = false)
public Customer getCustomer() {
return customer;
}
}