JPA 和双向多对多关系的无限递归(堆栈溢出)
Infinite recursion (Stackoverflow) with JPA and Biderectional ManyToMany Relantionship
我有一个 Spring Boot 1.3.5-RELEASE
应用程序,它使用 JPA
将我的 USERS
与具有 Bi-directional ManyToMany
关系的 ROLES
相关联。
User
@Table(name = "Users")
@Entity
public class User extends BaseEntity {
@NotEmpty
@Column(unique = true)
private String username;
@NotEmpty
private String password;
@JoinColumn(name = "user_iid")
@OneToMany
private Set<UserRole> userRoles;
//getters and setters
UserRole (intermediary table)
@Table(uniqueConstraints = @UniqueConstraint(columnNames = { "user_iid", "role_iid" }))
@Entity
public class UserRole extends BaseEntity {
@RestResource(exported = false)
@ManyToOne
@NotNull
private User user;
@ManyToOne
private Role role;
//getters and setters
Role
@Entity
public class Role extends BaseEntity {
@NotEmpty
@Column(unique = true)
private String name;
@JoinColumn(name = "role_iid")
@OneToMany
private Set<UserRole> userRoles;
//getters and setters
BaseEntity 是一个带有 Ids
和 Version
生成器的 class。
Repository
@Repository
public interface Repository extends JpaRepository<Role, String> {
Role findByIid(@Param("iid") final String iid);
当我 cURL 一个 localhost:8080/roles/search/findByIid?iid=1
时,我得到一个 Whosebug
。如果对象不存在,应用程序响应正常。
我已经试过了 @JsonIgnore
但还是不行。
谢谢
我得到了答案。
我更新了 Spring Boot to 1.4.2-RELEASE
(这是最后一个),一切都很顺利。我认为通过更新它更新了 JPA 和 Hibernate 并使它们更好地处理那些 ManyToMany 关系。
我有一个 Spring Boot 1.3.5-RELEASE
应用程序,它使用 JPA
将我的 USERS
与具有 Bi-directional ManyToMany
关系的 ROLES
相关联。
User
@Table(name = "Users")
@Entity
public class User extends BaseEntity {
@NotEmpty
@Column(unique = true)
private String username;
@NotEmpty
private String password;
@JoinColumn(name = "user_iid")
@OneToMany
private Set<UserRole> userRoles;
//getters and setters
UserRole (intermediary table)
@Table(uniqueConstraints = @UniqueConstraint(columnNames = { "user_iid", "role_iid" }))
@Entity
public class UserRole extends BaseEntity {
@RestResource(exported = false)
@ManyToOne
@NotNull
private User user;
@ManyToOne
private Role role;
//getters and setters
Role
@Entity
public class Role extends BaseEntity {
@NotEmpty
@Column(unique = true)
private String name;
@JoinColumn(name = "role_iid")
@OneToMany
private Set<UserRole> userRoles;
//getters and setters
BaseEntity 是一个带有 Ids
和 Version
生成器的 class。
Repository
@Repository
public interface Repository extends JpaRepository<Role, String> {
Role findByIid(@Param("iid") final String iid);
当我 cURL 一个 localhost:8080/roles/search/findByIid?iid=1
时,我得到一个 Whosebug
。如果对象不存在,应用程序响应正常。
我已经试过了 @JsonIgnore
但还是不行。
谢谢
我得到了答案。
我更新了 Spring Boot to 1.4.2-RELEASE
(这是最后一个),一切都很顺利。我认为通过更新它更新了 JPA 和 Hibernate 并使它们更好地处理那些 ManyToMany 关系。