如何在JSP页面中获取多对一关系?我试过了
<s:property value="group.division.name" />
但是JSP上没有数据出现。
Group
可以属于一个Division
。
public class Group implements java.io.Serializable {
..
private Division division;
..
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "div_id", nullable = false)
public Division getDivision() {
return this.division;
}
public void setDivision(Division division) {
this.division = division;
}
}
和
public class Division implements java.io.Serializable {
...
private String name;
private Set<Group> groups = new HashSet<Group>(0);
@Column(name = "name", nullable = false, length = 50)
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
@OneToMany(fetch = FetchType.LAZY, mappedBy = "division")
public Set<Group> getGroups() {
return this.groups;
}
public void setGroups(Set<Group> groups) {
this.groups = groups;
}
}
答案 0 :(得分:2)
我认为,这是因为你FetchType.LAZY
。删除那部分,默认情况下它会急切地获取它,如果我没弄错的话 - 很长时间没有触及Hibernate,因为它是@ManyToOne
。
EAGER
将尝试使用外部联接来检索关联对象,而LAZY
将仅在首次访问关联对象时触发显式SELECT
语句。现在,请注意,LAZY
只会起作用,并在事务中触发显式SELECT
来加载相关实体。在你的情况下,交易已经结束,似乎;因此它无法检索相关实体。
您可能想阅读this question here,它在问题和答案之一中简要地讨论过这个问题。