【问题标题】:Accessing object properties with JSTL - Spring and hibernate使用 JSTL 访问对象属性 - Spring 和休眠
【发布时间】:2011-08-29 20:24:13
【问题描述】:

我有 Persons(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 Person{
   String name;
   int id;
   PersonDivision personDivision;
 }

PersonDivision 类..

 class PersonDivision
 {
    int id;
    @OneToOne Person person;
    @ManytoOne Division division;
}

在首页(jsp),如果必须访问一个人的团队,我可以做类似的事情,${person.personDivisoin.divsion.name}

但是我如何访问 Person 的“部门”?理想情况下,它应该从“Division”表中获取 parentid 并从中获取名称.. ${person.personDivisoin.divsion.parentId} 提供 Parent Division id 但我不确定如何使用 JSTL 检索其名称.. 最好我能想到的是,将所有部门的列表作为带有 id 和 name 的二维数组发送,然后在视图中,从 id 中检索 name..

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

【问题讨论】:

    标签: hibernate jstl


    【解决方案1】:

    为什么需要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 上找到更多信息和示例

    【讨论】:

    • @abhagat .. 感谢关于 Division 类的建议。它看起来确实是正确的方法。关于 Parentdivision .. 遗留表包含更多的列,如 createddate、deactivateddate 等...我认为他们创建了这些列,认为一个人在 PersonDivision 表中可能有不止一条记录,但只有一条“活动”记录。我猜他们后来决定放弃这个想法,每人只有一条记录。。跨度>
    • 那么这就是您要查找的内容:docs.jboss.org/hibernate/core/3.5/reference/en/html/…。它以相同的方式表示关联,但它使用一个显式关联表,就像您拥有的那样。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-07-15
      • 2015-01-12
      • 1970-01-01
      • 2015-02-25
      • 2020-10-05
      • 2012-07-02
      • 1970-01-01
      • 1970-01-01
      • 2015-05-09
      相关资源
      最近更新 更多