Java Jackson序列化一对多关系 @OneToMany(mappedBy=“departments”) @JsonManagedReference 私人名单雇员名单; @许多酮 @JoinColumn(name=“部门id”) @JsonBackReference 私营部门,;

Java Jackson序列化一对多关系 @OneToMany(mappedBy=“departments”) @JsonManagedReference 私人名单雇员名单; @许多酮 @JoinColumn(name=“部门id”) @JsonBackReference 私营部门,;,java,spring,jackson,Java,Spring,Jackson,我有两个实体,员工和部门。每个员工都属于一个部门。 我使用@JsonManagedReference和@JsonBackReference来避免无限递归 但我无法从员工方面获得员工部门,因为它被忽略了。 在Laravel中,我可以建立双向关系以获得双向数据 在使用Jackson for Spring时,实现和获取双向数据的最佳方法是什么?我想从员工方面了解员工所在的部门。首先,让我们注释一下与@JsonManagedReference、@JsonBackReference的关系( 在您的示例中反

我有两个实体,员工和部门。每个员工都属于一个部门。 我使用@JsonManagedReference和@JsonBackReference来避免无限递归

但我无法从员工方面获得员工部门,因为它被忽略了。 在Laravel中,我可以建立双向关系以获得双向数据


在使用Jackson for Spring时,实现和获取双向数据的最佳方法是什么?我想从员工方面了解员工所在的部门。

首先,让我们注释一下与@JsonManagedReference、@JsonBackReference的关系( 在您的示例中反转它们),以便Jackson更好地处理这种关系:

@OneToMany(mappedBy = "departments")
@JsonManagedReference
private List<Employees> employeesList; 

@ManyToOne
@JoinColumn(name = "department_id")
@JsonBackReference
private Departments departments;
以及“部门”实体:

public class Employees{
     @ManyToOne
     @JsonManagedReference
     private Departments departments;
}
public class Departments {
     @OneToMany(mappedBy = "departments")
     @JsonBackReference
     private List<Employees> employeesList; 
}
@JsonIdentityInfo(
  generator = ObjectIdGenerators.PropertyGenerator.class, 
  property = "id")
public class Employees{ ... }

您可以删除Departments属性上方的所有注释,因为当您调用list employees时,该列表还将检索每个employees的Departments以获得答复。你能再解释一下吗?你的意思是我应该删除多对一的注释?如果我删除部门上方的注释,它会是一种双向关系吗?不会,它会是一种单向关系,但如果您需要从员工列表中查看部门,这是解决方案,在第二个具有双向功能的解决方案中,我将为您发布一个解决方案您是否有从
员工列表中删除/添加元素的方法?(实际上应该是
员工
)没有这个方法,它总是失败。需要所有的项目代码来检查什么是错误的;我特别想知道你所说的“忽略”是什么意思。是的,@Charfi,让它成为单向的。首先,我把它们颠倒过来,但遇到了一些问题,比如说无法管理引用。然后我把Jackson注释从部门中删除了。现在单向工作良好。谢谢你。我把Jackson从部门中删除了。单向工作很好。你的意思是我应该对员工和部门使用JsonManagedReference吗?如果我使用JsonIdentityinfo,应该从类中删除@Entity吗?抱歉,我在响应中出错,但我修复了它,您应该在list属性上方使用JsonBackReference。对于JsonIdentityInfo,保留实体并添加注释,此注释将有助于双向关系实体的序列化谢谢。若我对部门使用JsonManagedReference,当我试图保存到数据库中时,会出现错误,说无法管理。在我删除部门上的Json注释后,它工作正常。现在只有列表属性上的JsonBackReference。如果我使用单向关系,并且我想知道一个部门中有多少员工,那么获取查询的最佳方式是什么。我还应该从列表属性中删除“@OneToMany”并在部门属性中保留“@ManyToOne”吗?如果你想使用单向关系,你应该删除这些注释中的一个,并将注释保留在应用程序的主体类中,你可以通过查询()
@JsonIdentityInfo(
  generator = ObjectIdGenerators.PropertyGenerator.class, 
  property = "id")
public class Departments { ... }