【发布时间】:2013-06-24 16:05:49
【问题描述】:
这里我们有一个包含学生和教师列表的清单类,两者都可以为空。
class Manifest{
@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "MANIFEST_STUDENT")
List<String> students = new ArrayList<String>();
@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "MANIFEST_TEACHER")
List<String> teachers = new ArrayList<String>();;
@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "MANIFEST_OTHERS")
List<String> others = new ArrayList<String>();;
}
在 UI 上,有两个multiple select,一个用于student,一个用于teacher,供用户选择当前清单。
问题来了:
当用户 deselect all students 或 teachers 从列表中(意味着从当前 manifest 中删除所有学生或教师)并单击保存时,不幸的是,从 UI 和数据库中无法保存任何内容,这表明multiselect 选择看起来像以前一样 SAME。
从服务层看,代码就是这样。
manifest.merge();
看来我们必须保留 at least one 学生或教师的集合字段才能使更改有效。那么这里发生了什么,解决方案是什么?顺便说一句,我们在 Openjpa 上。
【问题讨论】:
-
你让我们猜测很多细节。对我们进行假设不太可能对您有所帮助。提供 JPA 注释、表模式的一些(简单)想法等会有所帮助。由于您已将此确定为 JPA 问题,因此我们不再对您的 UI 或其工作方式感兴趣。这样的细节只会混淆核心问题。准确了解您的代码(可能在 UI 中)如何与 JPA 实体交互。设置什么,以及如何设置。简单的代码 sn-ps 会有所帮助。最后,如果生成了异常,则显示异常。它们在这里是相关的。
标签: spring jakarta-ee jpa ejb