映射中的Hibernate OneToMany和ManyToOne错误

时间:2017-09-28 13:15:15

标签: java hibernate spring-boot

我有一个名为User的实体,包含以下字段:

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "user_id")
private Long id;    

@Column(name = "name")
private String name;

@Column(name = "last_name")
private String lastName;

@OneToMany(mappedBy="userId")   
private List<Survey> survey= new ArrayList<>();

调查实体有:

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "SURVEY_ID")
private Long Id;

@ManyToOne
@JoinColumn(name = "user_id",referencedColumnName="user_id")
private User userId;
.....

我希望一个用户有多个调查,每个调查都与一个用户有关。 但是我映射它的方式有问题,因为作为JSON文件,当我访问所有用户时,我得到了这个:

[{"id":1,"name":"User","lastName":"user","email":"user@user.com","surveyData":[{"userId":{"id":1,"name":"User","lastName":"user","email":"user@user.com","surveyData": ,...... and repeats itself

因此,我没有获得调查数据的值列表,而是获取用户信息的值? 有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:1)

您的映射是正确的。

只需在用户类中使用@JsonManagedReference,在调查类中使用@JsonBackReference即可。 @JsonManagedReference是引用的前向部分 - 正常序列化的部分。 @JsonBackReference是引用的后半部分 - 它将从序列化中省略。

在用户类中:

@OneToMany(mappedBy="userId")
@JsonManagedReference  
private List<Survey> survey;

在调查班中:

@ManyToOne
@JoinColumn(name = "user_id",referencedColumnName="user_id")
@JsonBackReference
private User userId;

我有2条评论:

  • 如果未订购调查,您可以考虑使用Set而不是List。
  • 我还建议将Survey类中的类变量userId重命名为user,因为它是User对象而没有标识符。