【发布时间】:2011-09-21 05:31:09
【问题描述】:
我经常看到使用 JPA 在网络上持久化的实体示例,但它只涉及一个实体。但我无法让自己理解是否涉及关系。
现在的例子,我在教授和系之间有一个多对一的映射。
@Entity
public class Professor {
@ManyToOne
@JoinColumn(name="DEPT_ID")
private Department department;
}
@Entity
public class Department {
//normal getters and setters
private int id;
private String name;
}
现在,在我的 JSF 页面中。我通常在我的表单元素之间添加映射
和我的托管 bean。
在添加操作期间,在 Web UI 中,您通常会显示部门的下拉框
添加新教授时。
<h:inputText value="#{myBean.currentProf.name}"/>
.
. /* other mappings here */
.
<h:selectOneMenu value="#{myBean.currentProf.department.name}>
<f:selectItems value="#{myBean.allDepartments}"/>
</h:selectOneMenu>
<h:commandButton value="Add" actionListener="#{myBean.handleSave}" />
现在,我的问题是:是否需要先获取部门然后将其设置为我当前的 教授属性之前坚持吗? 因为就我而言,我已经设置了部门名称但没有设置部门 ID..
@ManagedBean
public class MyBean{
public Professor currentProf;
public BusinessService service;
public String handleSave(){
Department dept = service.findDepartment(currentProf.getDepartment().getName());
currentProf.setDepartment(dept);
service.createProfessor(currentProf);
}
public List<SelectItem> getAllDepartments(){
return service.getAllDepartments();
}
}
为了清楚起见,我只是在这里展示我的业务服务。
public class BusinessService {
protected EntityManager em;
public Professor createProfessor(Professor prof) {
em.persist(prof);
return prof;
}
}
网上很多例子都是粗略的例子,比如:
Department dept = new Department();
dept.setId(1);
dept.setName("Finance");
Prof newProf = new Professor();
newProf.setDepartment(dept);
service.createProfessor(newProf);
但我认为这不是数据在 Web 应用程序中呈现和收集的方式。
【问题讨论】: