我知道这类问题已经被回答了很多次,而且有很多解决方案,但是,没有一个对我有效.我try 了@JsonIgnore
、@JsonIgnoreProperties
、@JsonManagedReference/@JsonBackedReference
,但调试器仍然显示user
引用了authority
,它引用了user
,它引用了authority
,它引用了user
...最重要的是it doesn't throw any exceptions.然而,我仍然想知道为什么会发生这种情况,为什么它不会抛出异常,以及它是否会影响生产力
我的实体很简单:有一个User
@Entity
@Table(name = "users_tb")
@NoArgsConstructor
@Getter
@Setter
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String password;
@OneToMany(mappedBy = "user", fetch = FetchType.LAZY)
private List<Authority> authorities;
}
和Authority
@Entity
@Table(name = "authorities_tb")
@NoArgsConstructor
@Getter
@Setter
public class Authority {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private User user;
}
使用JpaRepository<T, V>
检索用户的代码
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
var user = userRepository.findUserByUsername(username).orElseThrow(
() -> new UsernameNotFoundException(ERR_USERNAME_NOT_FOUND));
return new CustomUserDetails(user);
}
调试器从loadUserByUsername
返回前的输出状态:
user = {User@10781}
> id = {Long@10784}
> username = "John"
> password = "$2a$10$xn3LI/AjqicFYZFruSwve.681477XaVNaUQbr1gioaWPn4t1KsnmG"
> authorities = {PersistentBag@10788} size = 2
> 0 = {Authority@10818}
> id = {Long@10784}
> name = "READ"
> user = {User@10784}
> id = {User@10784}
> username = "John"
> password = "$2a$10$xn3LI/AjqicFYZFruSwve.681477XaVNaUQbr1gioaWPn4t1KsnmG"
> authorities = {PersistentBag@10788} size = 2
> 0 = {Authority@10818}
...