【发布时间】:2014-08-02 05:38:17
【问题描述】:
我有一个名为 school 的班级,里面有学生名单。我需要有一个注册页面来注册一所学校及其所有学生。由于每所学校的学生人数未知,我需要在“学校注册”页面中有一个“添加学生”按钮,以便用户一个一个添加所有学生。我可以创建一个表格来注册每所学校,但不确定如何实现“添加学生”功能。
我知道可以有一个“添加学生”按钮来触发学生注册表的灯箱,但我不知道如何保存每个学生的详细信息,然后将它们与学校记录相关联;因为学生记录需要学校的ID,反之亦然。请注意我不想提交学校记录然后添加学生记录,我需要同时添加学校及其所有学生的详细信息。
@Entity
public class School {
@Id
@GeneratedValue
private long id;
private String name;
private String principal;
private String city;
@OneToMany
private List<Student> students;
....
}
@Entity
public class Student {
@Id
@GeneratedValue
private long id;
private String name;
private int age;
@OneToOne
private School school;
....
}
表格
<s:form method="POST" action="register">
<s:textfield name="name" label="School's name"/>
<s:textfield name="principal" label="Principal"/>
<s:textfield name="city" label="City"/>
</s:form>
【问题讨论】:
-
表达双方的关系通常没有必要也没有好处。实际上,您拥有学校内学生列表的主要原因是是否有要强制执行的不变量,例如添加的学生数量有限。即使那样,由于可能有成千上万的学生,这样做可能是不切实际的。我只会表达多对一的关系(学生),我什至不会封装
School对象,只是它的 id。 -
@plalx 死了,这意味着我应该在学生班的学校领域拥有 ManytoOne 关系?不封装学校对象是什么意思?
-
我的意思是,最好你也可以简单地将学校的
id放在Student上而不是School对象上,但保持School对象也可以。跨度> -
@plalx 我保留了学校的学生名单,以便我更容易检索每所学校的学生。想象一下,我要根据校长姓名搜索学校的学生,在这种情况下,我需要先检索学校的 id,然后使用它来查找所有学生,但在这种情况下,我可以使用单个查询来检索所有学生.
-
学生很懒惰,其中可能是孤儿,让他们保持一种关系已经过时了。您可以按照 OWL 级别 1 建立与对象模型的关系。做出错误或不必要的关联会导致不正确的设计和对象流程。在尝试实现这些功能时,请记住现有的模式,例如表之间的主从关系,您可能将其映射为每个类的表。
标签: java javascript jquery hibernate struts2