使用JSTL访问对象属性 - Spring和hibernate

时间:2011-08-29 20:24:14

标签: hibernate jstl

我有人(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中删除名称。

我想知道是否有更好/更简单的方法来做到这一点..提前感谢!

2 个答案:

答案 0 :(得分:2)

为什么需要PersonDivision课程? 由于PersonDivisionPerson之间的关联被映射为@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;
}

您可以在Hibernate documentation about associations

上找到更多信息和示例

答案 1 :(得分:1)

而不是parentId,您可以拥有@ManyToOne Division parentDivision。它在数据库中是相同的,但是hibernate将获取父分区(以及整个层次结构,实际上,如果你没有将关系设置为lazy)。