2

我有两个名为Customer和的实体类Activity

CustomercustomerId, customerName,activities这里activities持有一组Activity对应于每个Customer映射@OneToMany(mappedBy = "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,customercustomerIdwith@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,我将它添加Activityactivities集合中Customer

我想知道:

  • 哪里得救了activitiesCustomer
  • 两个实体的更新和删除操作将如何相互影响?
  • @OneToMany这是建立和@ManyToOne建立关系的正确方式吗?
  • 我可以添加列名activities吗?

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

提前致谢。

4

1 回答 1

1

- 客户的活动在哪里得到保存?

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

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

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

如何使用 cascade 属性定义客户活动的删除@ManyToOne,例如:

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

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

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

是的,这是正确的。

- 我可以在活动上添加列名吗?

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

我希望这有帮助。

于 2013-02-01T07:05:30.700 回答