读取具有一对多关系的JPA模型时,生成不完整的JSON错误

Mil*_*das 4 json jax-rs one-to-many eclipselink jackson

我正在使用JPA EclipseLink在UseCasePainPoint之间建立一对多关系的模型。我能够很好地插入值。此后,我使用JAX-RS通过GET方法检索数据。GET方法失败,并显示错误- 生成不完整的JSON

控制台日志:

  • [EL Fine]:插入到USECASE中(UseCaseID,描述)值(?,?)bind => [1,描述]
  • [EL精细]:插入PAIN_POINT(PainPointID,PainPointDescription,USECASE_ID)值(?,?,?)bind => [2,疼痛点1,1]
  • [EL Fine]:SELECT UseCaseID,USECASE中的描述
  • 2017年11月17日晚上7:16:22 org.eclipse.yasson.internal.Marshaller marshall严重:生成不完整的JSON

用例:

@NamedQueries({@NamedQuery(name = "getAllUseCases", query = "SELECT c FROM UseCase c")})

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@NotNull
@Column(name = "UseCaseID")
private int UseCaseID;

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

@OneToMany(mappedBy="usecase", cascade=CascadeType.ALL, fetch=FetchType.EAGER)
private Collection<PainPoint> painPoints = new ArrayList<PainPoint>();
Run Code Online (Sandbox Code Playgroud)

痛点:

@NamedQueries({@NamedQuery(name = "getAllPainPoints", query = "SELECT c FROM PainPoint c")})

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@NotNull
@Column(name = "PainPointID")
private int PainPointID;

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

@ManyToOne
@JoinColumn (name="USECASE_ID", referencedColumnName="UseCaseID")
private UseCase usecase;
Run Code Online (Sandbox Code Playgroud)

数据加载器:

UseCase useCase = new UseCase("Description 1");
PainPoint painPoint1 = new PainPoint("Pain Point 1", useCase);
useCase.getPainPoints().add(painPoint1);
em.persist(useCase);
Run Code Online (Sandbox Code Playgroud)

UseCaseService:

@GET
@Path("/")
public List<UseCase> getUseCases() {

List<UseCase> retVal = null;

EntityManagerFactory emf = Utility.getEntityManagerFactory();
EntityManager em = emf.createEntityManager();

retVal = em.createNamedQuery("getAllUseCases").getResultList();

return retVal;
}
Run Code Online (Sandbox Code Playgroud)

Dal*_*ale 7

在用于循环引用或任何其他派生字段的getter方法上添加注解@JsonbTransient(程序包:javax.json.bind.annotation.JsonbTransient)。这等效于XML生成的@XmlTranisent批注,并且将阻止到JSON的转换进入无限循环。

我猜取决于您的工具集,但是对我来说,使用NetBeans,当实体类自动生成时,会添加XML的注释,而不是JSON的注释。只需将每个@XmlTransient与等效的@JsonbTransient匹配