admin管理员组

文章数量:1315365

I don't understand this error I'm getting, it has bee very frustating... I'm trying to use DataTables to display the data from to tables with oneToMany relationship, the only way the data is displayed in the view is by setting to null the relationship, that way the error above disappears but then I don't know how to display the data as I need to. Thanks in advance.

In user:

@JoinColumn(name = "id_rol", referencedColumnName = "id_rol", foreignKey = @ForeignKey(name = "fk_di")) 
@ManyToOne(optional = false) 
private Rol rol;

@GetMapping("/users/pag")
@ResponseBody
public String usersPaginate(HttpServletRequest request, HttpServletResponse response) {

    DataTableRequest<User> dataTableInRQ = new DataTableRequest<User>(request);
    PaginationCriteria pagination = dataTableInRQ.getPaginationRequest();

    String baseQuery = "SELECT id_user, username, name, lastname, password, id_rol, (SELECT COUNT(1) FROM user) AS total_records FROM user ORDER BY lastname ASC";
    String paginatedQuery = AppUtil.buildPaginatedQuery(baseQuery, pagination);

    Query query = entityManager.createNativeQuery(paginatedQuery, User.class);

    @SuppressWarnings("unchecked")
    List<User> usersList = query.getResultList();

    /*
    for (int i = 0; i<usersList.size(); i++){
        usersList.get(i).setRol(null);
    }*/

    DataTableResults<User> dataTableResult = new DataTableResults<User>();
    dataTableResult.setDraw(dataTableInRQ.getDraw());
    dataTableResult.setListOfDataObjects(usersList);
    if (!AppUtil.isObjectEmpty(usersList)) {
        dataTableResult.setRecordsTotal(usersList.get(0).getTotalRecords().toString());
        if (dataTableInRQ.getPaginationRequest().isFilterByEmpty()) {
            dataTableResult.setRecordsFiltered(usersList.get(0).getTotalRecords().toString());
        } else {
            dataTableResult.setRecordsFiltered(Integer.toString(usersList.size()));
        }
    }

    return new Gson().toJson(dataTableResult);
}

$(document)
    .ready(
            function() {
                var table = $('#paginatedTable')
                        .DataTable(
                                {
                                    initComplete : function() {
                                        var input = $(
                                                '.dataTables_filter input')
                                                .unbind(), self = this
                                                .api(), $searchButton = $(
                                                '#search')
                                                .click(
                                                        function() {
                                                            self
                                                                    .search(
                                                                            input
                                                                                    .val())
                                                                    .draw();
                                                        })
                                    },
                                    "processing" : true,
                                    "serverSide" : true,
                                    "pageLength" : 10,
                                    "lengthChange" : false,
                                    "columnDefs" : [
                                            {
                                                targets : '_all',
                                                orderable : false
                                            },
                                            {
                                                targets : [ 0, 3, 4, 5, 6 ],
                                                "className" : "text-center"
                                            },
                                            {
                                                targets : [ 3, 4, 5, 6, 7 ],
                                                searchable : false
                                            },
                                            {
                                                targets : [ 6 ],
                                                render : function(data,
                                                        type, row) {
                                                    return data == true ? 'Habilitado'
                                                            : 'Deshabilitado'
                                                }
                                            },
                                            {
                                                targets : [ 4 ],
                                                render : function(data,
                                                        type, row) {
                                                    return moment(data)
                                                            .format(
                                                                    "DD/MM/YYYY");
                                                }
                                            },
                                            {
                                                targets : [ 7 ],
                                                data : "idUser",
                                                render : function(data,
                                                        type, row, meta) {
                                                    return '<div class="btn-group"><a href="/users/ed/'
                                                            + data
                                                            + '"><img class="btnEdit" src="/images/edit.png"></a></div>';
                                                }
                                            } ],
                                    "ajax" : {
                                        "url" : "/users/pag",
                                        "data" : function(data) {
                                        }
                                    },
                                    "columns" : [ {
                                        "data" : "username"
                                    }, {
                                        "data" : "lastname"
                                    }, {
                                        "data" : "name"
                                    }, {
                                        "data" : "rol.tipoRol",
                                        render : function(data, type, row) {
                                            return data || '';
                                        }
                                    }]
                                });
            });

   org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.StackOverflowError
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:982) ~[spring-webmvc-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) ~[spring-webmvc-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) [spring-webmvc-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) [spring-webmvc-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:635) [tomcat-embed-core-8.5.16.jar:8.5.16]
2018-01-18 00:00:11.508 ERROR 9160 --- [nio-8091-exec-6] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed; nested exception is java.lang.StackOverflowError] with root cause

java.lang.StackOverflowError: null
at java.util.Calendar.get(Calendar.java:1826) ~[na:1.8.0_144]
at java.text.SimpleDateFormat.subFormat(SimpleDateFormat.java:1119) ~[na:1.8.0_144]
at java.text.SimpleDateFormat.format(SimpleDateFormat.java:966) ~[na:1.8.0_144]
at java.text.SimpleDateFormat.format(SimpleDateFormat.java:936) ~[na:1.8.0_144]
at java.text.DateFormat.format(DateFormat.java:345) ~[na:1.8.0_144]

I don't understand this error I'm getting, it has bee very frustating... I'm trying to use DataTables to display the data from to tables with oneToMany relationship, the only way the data is displayed in the view is by setting to null the relationship, that way the error above disappears but then I don't know how to display the data as I need to. Thanks in advance.

In user:

@JoinColumn(name = "id_rol", referencedColumnName = "id_rol", foreignKey = @ForeignKey(name = "fk_di")) 
@ManyToOne(optional = false) 
private Rol rol;

@GetMapping("/users/pag")
@ResponseBody
public String usersPaginate(HttpServletRequest request, HttpServletResponse response) {

    DataTableRequest<User> dataTableInRQ = new DataTableRequest<User>(request);
    PaginationCriteria pagination = dataTableInRQ.getPaginationRequest();

    String baseQuery = "SELECT id_user, username, name, lastname, password, id_rol, (SELECT COUNT(1) FROM user) AS total_records FROM user ORDER BY lastname ASC";
    String paginatedQuery = AppUtil.buildPaginatedQuery(baseQuery, pagination);

    Query query = entityManager.createNativeQuery(paginatedQuery, User.class);

    @SuppressWarnings("unchecked")
    List<User> usersList = query.getResultList();

    /*
    for (int i = 0; i<usersList.size(); i++){
        usersList.get(i).setRol(null);
    }*/

    DataTableResults<User> dataTableResult = new DataTableResults<User>();
    dataTableResult.setDraw(dataTableInRQ.getDraw());
    dataTableResult.setListOfDataObjects(usersList);
    if (!AppUtil.isObjectEmpty(usersList)) {
        dataTableResult.setRecordsTotal(usersList.get(0).getTotalRecords().toString());
        if (dataTableInRQ.getPaginationRequest().isFilterByEmpty()) {
            dataTableResult.setRecordsFiltered(usersList.get(0).getTotalRecords().toString());
        } else {
            dataTableResult.setRecordsFiltered(Integer.toString(usersList.size()));
        }
    }

    return new Gson().toJson(dataTableResult);
}

$(document)
    .ready(
            function() {
                var table = $('#paginatedTable')
                        .DataTable(
                                {
                                    initComplete : function() {
                                        var input = $(
                                                '.dataTables_filter input')
                                                .unbind(), self = this
                                                .api(), $searchButton = $(
                                                '#search')
                                                .click(
                                                        function() {
                                                            self
                                                                    .search(
                                                                            input
                                                                                    .val())
                                                                    .draw();
                                                        })
                                    },
                                    "processing" : true,
                                    "serverSide" : true,
                                    "pageLength" : 10,
                                    "lengthChange" : false,
                                    "columnDefs" : [
                                            {
                                                targets : '_all',
                                                orderable : false
                                            },
                                            {
                                                targets : [ 0, 3, 4, 5, 6 ],
                                                "className" : "text-center"
                                            },
                                            {
                                                targets : [ 3, 4, 5, 6, 7 ],
                                                searchable : false
                                            },
                                            {
                                                targets : [ 6 ],
                                                render : function(data,
                                                        type, row) {
                                                    return data == true ? 'Habilitado'
                                                            : 'Deshabilitado'
                                                }
                                            },
                                            {
                                                targets : [ 4 ],
                                                render : function(data,
                                                        type, row) {
                                                    return moment(data)
                                                            .format(
                                                                    "DD/MM/YYYY");
                                                }
                                            },
                                            {
                                                targets : [ 7 ],
                                                data : "idUser",
                                                render : function(data,
                                                        type, row, meta) {
                                                    return '<div class="btn-group"><a href="/users/ed/'
                                                            + data
                                                            + '"><img class="btnEdit" src="/images/edit.png"></a></div>';
                                                }
                                            } ],
                                    "ajax" : {
                                        "url" : "/users/pag",
                                        "data" : function(data) {
                                        }
                                    },
                                    "columns" : [ {
                                        "data" : "username"
                                    }, {
                                        "data" : "lastname"
                                    }, {
                                        "data" : "name"
                                    }, {
                                        "data" : "rol.tipoRol",
                                        render : function(data, type, row) {
                                            return data || '';
                                        }
                                    }]
                                });
            });

   org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.StackOverflowError
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:982) ~[spring-webmvc-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) ~[spring-webmvc-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) [spring-webmvc-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) [spring-webmvc-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:635) [tomcat-embed-core-8.5.16.jar:8.5.16]
2018-01-18 00:00:11.508 ERROR 9160 --- [nio-8091-exec-6] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed; nested exception is java.lang.StackOverflowError] with root cause

java.lang.StackOverflowError: null
at java.util.Calendar.get(Calendar.java:1826) ~[na:1.8.0_144]
at java.text.SimpleDateFormat.subFormat(SimpleDateFormat.java:1119) ~[na:1.8.0_144]
at java.text.SimpleDateFormat.format(SimpleDateFormat.java:966) ~[na:1.8.0_144]
at java.text.SimpleDateFormat.format(SimpleDateFormat.java:936) ~[na:1.8.0_144]
at java.text.DateFormat.format(DateFormat.java:345) ~[na:1.8.0_144]
Share Improve this question edited Jan 18, 2018 at 6:49 Kmtasia asked Jan 18, 2018 at 6:35 KmtasiaKmtasia 681 gold badge2 silver badges10 bronze badges 1
  • Its a StackOverflowError You came to the right place my friend :-D – sparker Commented Jul 28, 2022 at 12:10
Add a ment  | 

1 Answer 1

Reset to default 3

If anyone is interested in the solution:

  1. I added this class to my project GraphAdapterBuilder, and changed the last line of my controller for:

    GsonBuilder gsonBuilder = new GsonBuilder();
    new GraphAdapterBuilder().addType(User.class).registerOn(gsonBuilder);
    Gson gson = gsonBuilder.create();
    return gson;
    

    That way I get this Json in response, with all the needed information:

    {"draw":"1","recordsFiltered":"3","recordsTotal":"3","data":[{"0x1":{"idUser":3,"username":"grtyg","name":"","lastname":"","totalRecords":3,"rol":{"idRol":2,"rol":"User ad"}}}}]}
    
  2. I could had simply use the javax @Transient annotation in the Rol entity as below:

     @Transient 
     @OneToMany(cascade = CascadeType.ALL, mappedBy = "rol")
     private Set<User> users;
    

    but later on I would need to use it.

本文标签: