Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate OneToMany映射-保存实体集的位置?_Java_Hibernate_Orm_Hibernate Annotations - Fatal编程技术网

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