java - 尝试在 Java 中将 List 从数据库转换为 json 时的 Stackoverflow

标签 java json hibernate jpa orm

我有一个问题。这里是我的实体用户和用户角色

用户

package com.springapp.model;

import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;

@Entity
@Table(name = "users", catalog = "users")
public class User {

private String username;
private String password;
private boolean enabled;
private String email;


private String token;
private Set<UserRole> userRole = new HashSet<UserRole>(0);

public User() {
    this.enabled=false;
}

@Column(name = "token",
        nullable = false, length = 80)
public String getToken() {
    return this.token;
}

public void setToken(String token) {
    this.token = token;
}

public String getEmail() {
    return this.email;
}
@Column(name = "email",
        nullable = false, length = 80)
public void setEmail(String email) {
    this.email = email;
}

@Id
@Column(name = "username", unique = true,
        nullable = false, length = 45)
public String getUsername() {
    return this.username;
}

public void setUsername(String username) {
    this.username = username;
}

@Column(name = "password",
        nullable = false, length = 60)
public String getPassword() {
    return this.password;
}

public void setPassword(String password) {
    this.password = password;
}

@Column(name = "enabled", nullable = false)
public boolean isEnabled() {
    return this.enabled;
}

public void setEnabled(boolean enabled) {
    this.enabled = enabled;
}

@OneToMany(fetch = FetchType.EAGER, mappedBy = "user")
public Set<UserRole> getUserRole() {
    return this.userRole;
}

public void setUserRole(Set<UserRole> userRole) {
    this.userRole = userRole;
}

}

用户角色

package com.springapp.model;

import javax.persistence.*;

import static javax.persistence.GenerationType.IDENTITY;

@Entity
@Table(name = "user_roles", uniqueConstraints = @UniqueConstraint(
            columnNames = { "role", "username" }))
public class UserRole{

private Integer userRoleId;
private User user;

private String role;

public UserRole() {
}

public UserRole(User user, String role) {
    this.user = user;
    this.role = role;
}

@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "user_role_id",
        unique = true, nullable = false)
public Integer getUserRoleId() {
    return this.userRoleId;
}

public void setUserRoleId(Integer userRoleId) {
    this.userRoleId = userRoleId;
}

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "username", nullable = false)
public User getUser() {
    return this.user;
}

public void setUser(User user) {
    this.user = user;
}

@Column(name = "role", nullable = false, length = 45)
public String getRole() {
    return this.role;
}

public void setRole(String role) {
    this.role = role;
}

}

现在我想使用 gson lib 获取用户列表及其角色列表到 json

 List<User> users = userService.showAllUsers();
 Gson gson = new Gson();
 return  gson.toJson(users);

但它因计算器错误而失败。我认为这是因为每个用户指的是角色,而角色指的是用户(因为我们在 Userroles 中有 User 用户,在用户中有 Set of roles)。它变成了“递归”。我怎样才能避免这个错误?

最佳答案

当您进行双向关联并且 JSon 不忽略一侧时,就会发生这种情况。

你需要用@JsonIgnore标记多对一的一面:

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "username", nullable = false)
@JsonIgnore
public User getUser() {
    return this.user;
}

关于java - 尝试在 Java 中将 List 从数据库转换为 json 时的 Stackoverflow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31697256/

相关文章:

java - 改造 header NullPointerException

javascript - 自定义排序函数如何用于多维数组

Android + JSON 防止反编译?

c# - 反序列化json数据c#

java - 尝试对使用 Hibernate 进行数据库查询且无法创建 session 的类进行单元测试

java - JPA:如何将实体与关系属性关联起来?

java - 增加 hashmap java 的值

java - Spring Social Facebook - 发布/发布 API 详细信息

Java Hibernate JPQL 查询(聚合函数 : count)

java - HIbernate 在 Getter/Setter 中加密和解密?