【问题标题】:Fetch many to one hibernate in JSP在 JSP 中获取多对一休眠
【发布时间】:2013-11-06 03:08:38
【问题描述】:

如何在 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;
    }
}

【问题讨论】:

    标签: java hibernate jsp


    【解决方案1】:

    我想,是因为你的FetchType.LAZY。删除该部分,如果我没记错的话,默认情况下它会急切地获取它 - 很长时间没有接触 Hibernate,因为它的 @ManyToOne

    EAGER 将尝试使用外连接来检索关联对象,而LAZY 只会在第一次访问关联对象时触发显式SELECT 语句。现在,这里需要注意的是,LAZY 东西只会起作用,并且会触发一个显式的SELECT 以在事务中加载相关实体。在您的情况下,交易似乎已经结束;因此它无法检索相关实体。

    您可能想阅读this question here,它在问题和答案之一中简要讨论了这个事情。

    【讨论】:

    • 所以应该是FetchType.EAGER
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 2013-08-29
    • 1970-01-01
    相关资源
    最近更新 更多