Java 将实体从一对多关系重构为一对一关系(它有自己的一对多关系,便于更新)有什么意义吗?

Java 将实体从一对多关系重构为一对一关系(它有自己的一对多关系,便于更新)有什么意义吗?,java,spring,hibernate,jpa,one-to-one,Java,Spring,Hibernate,Jpa,One To One,大家好 我面临着一些奇怪的困境,不知道这是否有意义 假设我有: public class Training { ......... @OneToMany List progress = new AutoPopulatingList(); @OneToMany List workout = new AutoPopulatingList(); ........ } 现在,如果我只需要将被操作的进度数据,那么将一些进度对象添加到此列表中,将一些其他

大家好

我面临着一些奇怪的困境,不知道这是否有意义

假设我有:


public class Training {
    .........
    @OneToMany
    List progress = new AutoPopulatingList();

    @OneToMany
    List workout = new AutoPopulatingList();
    ........
}
现在,如果我只需要将被操作的进度数据,那么将一些进度对象添加到此列表中,将一些其他对象删除。 (我将从数据库中获得训练对象,其中包含急切填充的进度列表,并且训练列表将为空,因为它是惰性加载的)

因此,在jsp表单中:

<form:form method="POST" modelAttribute="training" action="/updateTraining" id="trainingData"> 
...........
</form:form>
现在我只需从单独的表中获取PgoressJoin对象,对progress列表进行更改并保存它


那么我的问题是,这样可以吗?有人喜欢这个吗?也许有更聪明的方法吗?

你说:所以现在如果我想保存更改,我的训练数据不存在,只会被删除。。这就是你的问题所在。看起来你正在从头开始重新创建一个训练实例。你不应该。获取现有的培训,并使用从表单中获取的数据进行更新,保持训练列表不变。@谢谢您的回复。但我还是不明白。若我从数据库和存储库中获取训练对象,它将传递给控制器,从控制器传递给视图(jsp),然后从视图返回,它将传递给控制器,但带有额外的进度数据。但当我想保存它时,它缺少训练数据,hibernate/jpa认为它已被删除,并将其从DB中删除。。。。但此训练数据甚至没有加载,因为加载不需要的数据(延迟加载)太疯狂了。表单提交的工作流应该是:1。从提交的表单数据中获取更新实体的ID;2.使用此ID从数据库获取实体;3.用提交的表单数据更新实体。我明白了。所以据我所知,既然数据已经提交并准备好保存,我应该在持久化方法中获取训练对象,设置新数据,所有未初始化的内容(保留为惰性)不应该困扰我:)非常感谢。

public class Training {
    .........
    @OneToOne
    ProgressJoin progress;

    @OneToMany
    List workout = new AutoPopulatingList();
    ........
}

public class ProgressJoin {
    ..........
    @OneToOne
    Training training 

    @OneToMany
    List progress = new AutoPopulatingList();   
    ..........
}