Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用hibernate获取一个或多个参考数据_Hibernate_Spring Mvc - Fatal编程技术网

如何使用hibernate获取一个或多个参考数据

如何使用hibernate获取一个或多个参考数据,hibernate,spring-mvc,Hibernate,Spring Mvc,我想使用SpringMvc+Spring+hibernate制作一个OrderDine web项目。 但似乎我在jsp页面上打印数据时遇到了一些问题 调试项目时(很抱歉,我无法发布调试图片) 我不明白为什么“mealOrders”的财产总是空的。。。 但我已经在表中插入了许多数据 以下是我的entitys和HQL查询 用户类 以及下面的HQL查询 @SuppressWarnings("unchecked") @Override public List<User> FindAllUse

我想使用SpringMvc+Spring+hibernate制作一个OrderDine web项目。 但似乎我在jsp页面上打印数据时遇到了一些问题

调试项目时(很抱歉,我无法发布调试图片)

我不明白为什么“mealOrders”的财产总是空的。。。 但我已经在表中插入了许多数据

以下是我的entitys和HQL查询

用户类

以及下面的HQL查询

@SuppressWarnings("unchecked")
@Override
public List<User> FindAllUsers() {
    Session session = sessionFactory.openSession();
    org.hibernate.Query query = session.createQuery("from User u left join u.mealOrders");
    return (List<User>) query.list();
}
@SuppressWarnings(“未选中”)
@凌驾
公共列表FindAllUsers(){
Session Session=sessionFactory.openSession();
org.hibernate.Query Query=session.createQuery(“从用户u向左加入u.mealOrders”);
return(List)query.List();
}
和我的jsp页面(它无法打印数据)


${user.userName}
${user.userID}

如何在jsp页面上打印数据?

我不明白,既然已经有了映射,为什么还需要这个查询。如果您给出简单的select语句,这可能会起作用。避免在查询中加入join

  • 您可以使fetch类型成为EAGER,这将强制用户始终检索它的子项(如果您不总是需要所有数据,那么就不需要期望的性能)
  • 您可以在事务仍处于打开状态时“获取”子项,这将导致对数据库的另一个查询
  • 您可以将查询更改为“left joinfetch”以强制创建对象

  • 你的意思是你不能打印用户的测量值?你有任何异常吗?没有任何异常,但我不知道如何编写代码以便在jsp页面上显示数据。感谢帮助:)查看使用了FetchType.LAZY,可能是他应该将其修改为“渴望”,如果在事务之外访问它现在可以工作了,原因是我无法处理“LAZY”,谢谢你的帮助:)
    @Entity
    @Table(name="MealOrder")
    public class MealOrder  implements Serializable {
    
        private static final long serialVersionUID = 1L;
    
        private Long mealOrderID;
        private int orderState;
        //private Long userID;
        private String userName;
        private String postion;
        private String telePhone;
        private String userLocation;
        private Date orderTime;
        private String restaurantName;
        private int restaurantID;
        private String supplyTimeType;
        private Date beginSupplyTime;
        private Date endSupplyTime;
        private Date beginSupplyDate;
        private Date endSupplyDate;
        private int mealMenuID;
        private String mealMenuName;
        private String mealPackageName;
        private int mealPackageID;
        private float mealPackagePrice;
    
        private User user;
    
        @Id
        @GeneratedValue
        @Column(name = "ID")
        public Long getMealOrderID() {
            return mealOrderID;
        }
    
        public void setMealOrderID(Long mealOrderID) {
            this.mealOrderID = mealOrderID;
        }
        ...I hide some useless propertys
        @ManyToOne(fetch=FetchType.LAZY,cascade = CascadeType.ALL)
        @JoinColumn(name = "UserID")
        public User getUser() {
            return user;
        }
    
        public void setUser(User user) {
            this.user = user;
        }
    
    @SuppressWarnings("unchecked")
    @Override
    public List<User> FindAllUsers() {
        Session session = sessionFactory.openSession();
        org.hibernate.Query query = session.createQuery("from User u left join u.mealOrders");
        return (List<User>) query.list();
    }
    
    <c:forEach items="${users}" var="user">
                <tr>
                    <td>${user.userName}</td>
                    <td>${user.userID}</td>
                </tr>
            </c:forEach>