我有人(id,name,..),Division(id,name,parentId,level ...)和PersonDivisoin(id,personId,divisionId ....)表。应用程序使用hibernate框架来映射关系与Person和Person Division之间的onetoone映射,Division和PersonDivision之间的onetomany映射。下面是来自Division表的示例数据..
_ _ _ _ _ _ __ _ _ _ _ _ _ _
| id | name | parentId| level|
-----------------------------
1 XYZ dept
2 ZYW 1 team
和PersonDivision表是......
_ _ _ _ _ _ _ _ _ _ _ _ __ _ _
| id | personid | divisionId|
------------------------------
1 1 2
如果我有一个人物对象,那么我在前端获取父分区名称的值时会遇到麻烦。
Person class看起来像这样......
class Person{
String name;
int id;
PersonDivision personDivision;
}
PersonDivision类..
class PersonDivision
{
int id;
@OneToOne Person person;
@ManytoOne Division division;
}
首页(jsp)上的,如果必须访问一个人的团队,我可以做类似的事情,$ {person.personDivisoin.divsion.name}
但我如何访问Person的“部门”?理想情况下,它应该从“分区”表中获取parentid并从中获取名称.. $ {person.personDivisoin.divsion.parentId}给出父分区ID但我不确定如何使用JSTL检索其名称..最好我能想到的是,将所有分区的列表作为带有id和名称的二维数组发送到视图中,从id中删除名称。
我想知道是否有更好/更简单的方法来做到这一点..提前感谢!
答案 0 :(得分:2)
为什么需要PersonDivision
课程?
由于PersonDivision
和Person
之间的关联被映射为@OneToOne
,因此将Division
映射为Person
中的字段会不会更容易?
像这样的东西
class Person {
@Column
String name;
@Id
int id;
@ManyToOne
Division division;
}
这样您就可以访问部门名称${person.division.name}
。
除此之外,如果您按如下方式定义Division
,您应该能够轻松访问父分部(${person.division.parent.name}
以获取父名称)。
class Division {
@Column
String name;
@Id
int id;
@ManyToOne
Division parent;
}
上找到更多信息和示例
答案 1 :(得分:1)
而不是parentId
,您可以拥有@ManyToOne Division parentDivision
。它在数据库中是相同的,但是hibernate将获取父分区(以及整个层次结构,实际上,如果你没有将关系设置为lazy)。