gpt4 book ai didi

java - Hibernate OneToMany 映射 - 实体集保存在哪里?

转载 作者:行者123 更新时间:2023-11-30 11:36:12 26 4
gpt4 key购买 nike

我有两个名为CustomerActivity 的实体类。

CustomercustomerId,customerName,activities 这里 activities 持有一组Activity 对应于 @OneToMany(mappedBy = "customer") 关系映射的每个 Customer

Customer 类定义如下(为清楚起见,我删除了其他字段和一些 getter 和 setter):

@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;
}
}

ActivityactivityId,activityName,customercustomerId 映射与 @ManyToOne 关系。

Activity 类的定义如下:

@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;
}
}

在保存新的 Activity 之前,我将此 Activity 添加到 Customeractivities 集中。

我想知道:

  • 客户 Activity 保存在哪里?
  • 两个实体的更新和删除操作将如何相互影响?
  • 创建@OneToMany@ManyToOne 关系的方式是否正确?
  • 我可以在 Activity 上添加列名称吗?

我是 hibernate 的初学者,任何指针都会对我很有帮助。

提前致谢。

最佳答案

- 客户的 Activity 保存在哪里?

它们不会在数据库中的任何地方保存为“客户 Activity ”。当需要客户的 Activity 时,使用 customer_id 列上的连接查询将它们与客户一起加载,或者使用过滤 customer_id 列的单独查询稍后加载它们(延迟加载)。

- 两个实体的更新和删除操作将如何相互影响?

删除 Activity 不会影响客户,但下次加载其 Activity 时,删除的 Activity 将不再是集合的一部分。

如何使用 @ManyToOne 上的级联属性定义客户 Activity 的删除,例如:

@OneToMany(mappedBy = "客户", cascade = CascadeType.REMOVE)

基本上,所需的行为取决于 Activity 是否可以在没有客户的情况下独立存在:如果是,则可以删除客户,并且 customer_id 字段可以设置为 null Activity 表。否则,属于客户的 Activity 将被“级联删除”。或者,在先删除客户的所有 Activity 之前,无法删除客户。

- 创建@OneToMany 和@ManyToOne 关系的正确方法吗?

是的,这是正确的。

- 我可以在 Activity 上添加列名称吗?

不,这没有任何意义。一列只能包含一个ID, Activity 是一个集合。

希望对您有所帮助。

关于java - Hibernate OneToMany 映射 - 实体集保存在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14640917/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com