I have the following code to retrieve data from my db. Im running on wildfly and MySQL servers.
The below snippet should return all the user groups available.
@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());
}
}
}
The below snippet should return all the users available.
@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());
}
}
}
The ajax requests are sent as below:
$(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.')
}
});
});
My User entity is shown:
@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;
My User Group Entity:
@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>();
However, I might use the exact code above and return all the data available in the tables, and if the data is not there I get an empty array as the response in the browser console window. The next time I send the request, I get the following:
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"]-