如何使用休眠和Ajax请求读取表

rufusy:

我有以下代码从我的数据库中检索数据。我在wildfly和MySQL服务器上运行。

以下代码段应返回所有可用的用户组。

@WebServlet(urlPatterns = {"/groups_list"})
public class UserGroupList extends HttpServlet {
    /**
     * Get all users groups available
     * @param request
     * @param response
     * @throws IOException
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        Session session = HibernateHelper.getSessionFactory().openSession();
        List<UserGroup> userGroups= session.createQuery("FROM UserGroup UG").getResultList();
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            String json = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(userGroups);
            response.getWriter().println(json);
        } catch(Exception e) {
            response.getWriter().println(e.getMessage());
        }
    }
}

以下代码段应返回所有可用用户。

@WebServlet(urlPatterns = {"/users_list"})
public class UsersList extends HttpServlet {
    /**
     * Get all users available
     * @param request
     * @param response
     * @throws IOException
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        Session session = HibernateHelper.getSessionFactory().openSession();
        List<User> users = session.createQuery("FROM User s").getResultList();
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            String json = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(users);
            response.getWriter().println(json);
        } catch(Exception e) {
            response.getWriter().println(e.getMessage());
        }
    }
}

ajax请求的发送方式如下:

 $(function() {
        // Fetch all user groups
        $.ajax({
            type: 'GET',
            url: 'http://localhost:8080/shopping_cart/groups_list',
            dataType:'json',
            success: function(data){
     
            },
            error: function(data){
                toastr.error('Error. Couldn\'t fetch user groups.')
            }
        });

        // Fetch all users
        $.ajax({  
            type: "GET",  
            url: "http://localhost:8080/shopping_cart/users_list",  
            dataType: "json",  
            contentType: "application/json",  
            success: function(response) {  
              console.log(response); 
            },  
            error: function(data){
                toastr.error('Error fetching user goups.')
            }
        });  
    });

显示我的用户实体:

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="user_id")
    private int id;

    @Embedded
    private Person person;

    @Column(columnDefinition = "VARCHAR(255)")
    private String image;

    @ManyToOne
    @JoinColumn(name="user_group_id", nullable = false, referencedColumnName = "user_group_id")
    private UserGroup userGroup;

我的用户组实体:

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="user_group_id")
    private int id;

    @NotNull
    @Column(nullable = false, columnDefinition = "VARCHAR(20)")
    private String name;

    @NotNull
    @Column(nullable = false, columnDefinition = "TEXT")
    private String permission;

    @OneToMany(mappedBy="userGroup",
    cascade={CascadeType.PERSIST, CascadeType.MERGE},
    fetch = FetchType.LAZY)
    private List<User> users = new ArrayList<User>();

但是,我可能使用上面的确切代码,并返回表中所有可用的数据,如果数据不存在,我会在浏览器控制台窗口中得到一个空数组作为响应。下次发送请求时,我得到以下信息:

Infinite recursion (StackOverflowError) (through reference chain: models.UserGroup["users"]->org.hibernate.collection.internal.PersistentBag[0]->models.User["userGroup"]->models.UserGroup["users"]->org.hibernate.collection.internal.PersistentBag[0]->models.User["userGroup"]->models.UserGroup["users"]->org.hibernate.collection.internal.PersistentBag[0]->models.User["userGroup"]->models.UserGroup["users"]->org.hibernate.collection.internal.PersistentBag[0]->models.User["userGroup"]->models.UserGroup["users"]->org.hibernate.collection.internal.PersistentBag[0]->models.User["userGroup"]->models.UserGroup["users"]->org.hibernate.collection.internal.PersistentBag[0]->models.User["userGroup"]->models.UserGroup["users"]->org.hibernate.collection.internal.PersistentBag[0]->models.User["userGroup"]->models.UserGroup["users"]->org.hibernate.collection.internal.PersistentBag[0]->models.User["userGroup"]->models.UserGroup["users"]->org.hibernate.collection.internal.PersistentBag[0]->models.User["userGroup"]->models.UserGroup["users"]->org.hibernate.collection.internal.PersistentBag[0]->models.User["userGroup"]->models.UserGroup["users"]->org.hibernate.collection.internal.PersistentBag[0]->models.User["userGroup"]->models.UserGroup["users"]->org.hibernate.collection.internal.PersistentBag[0]->models.User["userGroup"]->models.UserGroup["users"]->org.hibernate.collection.internal.PersistentBag[0]->models.User["userGroup"]->models.UserGroup["users"]->org.hibernate.collection.internal.PersistentBag[0]->models.User["userGroup"]->models.UserGroup["users"]->org.hibernate.collection.internal.PersistentBag[0]->models.User["userGroup"]->models.UserGroup["users"]->org.hibernate.collection.internal.PersistentBag[0]->models.User["userGroup"]->models.UserGroup["users"]->org.hibernate.collection.internal.PersistentBag[0]->models.User["userGroup"]->models.UserGroup["users"]->org.hibernate.collection.internal.PersistentBag[0]->models.User["userGroup"]->models.UserGroup["users"]->org.hibernate.collection.internal.PersistentBag[0]->models.User["userGroup"]->models.UserGroup["users"]->org.hibernate.collection.internal.PersistentBag[0]->models.User["userGroup"]->models.UserGroup["users"]->org.hibernate.collection.internal.PersistentBag[0]->models.User["userGroup"]->models.UserGroup["users"]->org.hibernate.collection.internal.PersistentBag[0]->models.User["userGroup"]->models.UserGroup["users"]->org.hibernate.collection.internal.PersistentBag[0]->models.User["userGroup"]->models.UserGroup["users"]->org.hibernate.collection.internal.PersistentBag[0]->models.User["userGroup"]->models.UserGroup["users"]->org.hibernate.collection.internal.PersistentBag[0]->models.User["userGroup"]->models.UserGroup["users"]->org.hibernate.collection.internal.PersistentBag[0]->models.User["userGroup"]->models.UserGroup["users"]->org.hibernate.collection.internal.PersistentBag[0]->models.User["userGroup"]->models.UserGroup["users"]->org.hibernate.collection.internal.PersistentBag[0]->models.User["userGroup"]->models.UserGroup["users"]->org.hibernate.collection.internal.PersistentBag[0]->models.User["userGroup"]->models.UserGroup["users"]->org.hibernate.collection.internal.PersistentBag[0]->models.User["userGroup"]->models.UserGroup["users"]->org.hibernate.collection.internal.PersistentBag[0]->models.User["userGroup"]->models.UserGroup["users"]->org.hibernate.collection.internal.PersistentBag[0]->models.User["userGroup"]->models.UserGroup["users"]-
v.ladynev:

原因可能是您没有真正将任何错误返回给客户端,原因是

catch(Exception e) {
  e.printStackTrace();
}

另外,如果您打开了Hibernate会话,则必须在final中将其关闭

Jackson在将实体转换为JSON的过程中进行无限处理的原因 User -> UserGroup -> User

您可以使用其他Jackson注释解决问题

无限递归与Jackson JSON和Hibernate JPA问题

我建议您更改模型:

UserGroup是表格数据,因此您不必在其中存储用户。只需将其从UserGroup

private List<User> users = new ArrayList<User>();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

与和休眠限制,如何使用?

如何使用本地日期创建休眠请求

在读取和删除行之前休眠锁定表

如何使用python请求(获取)和读取xml文件?

如何使用 fs 和批量请求读取多个 json 文件

如何读取请求 URL 给出的表数据?

如何使用PHP和jQuery发送安全的AJAX请求

如何使用Ajax和Node从表单执行Get请求

如何同时使用jQuery验证程序和AJAX请求?

如何使用JSONP,Ajax和jquery读取数据?

单击表行时如何发出 Ajax 请求?

使用休眠和Java Swing从MySQL DB恢复表

在休眠表和飞行通道中使用Spel

如何排序和搜索使用Ajax创建的dom表元素

如何使用JavaScript读取发布请求参数

如何使用 GCDWebServerRequest 读取 POST 请求的正文

如何使用 JQUERY AJAX 和 HTML 每 30 秒从 XML 读取和显示数据

使用休眠创建新表时如何维护列顺序?

如何使用休眠条件连接 3 个表?

使用Ajax从JSON读取和显示值

使用jQuery和AJAX读取XML失败

如何从节点js post ajax请求读取数据?

我如何在数据表的 ajax 请求的列部分中使用变量

如何使用onclick从另一个ajax请求重新加载数据表

如何使用ajax请求将html表传递给laravel控制器?

如何使用jQuery ajax请求在数据表中显示json响应数据?

当休眠必须是表的主键时,如何使用休眠生成自定义ID

从表中读取数据,其中使用休眠模式组合主键

在Ajax请求之后填写Bootstrap表(JSP和Spring MVC)