春1.3.5実行中のアプリケーションでのエンティティワークスの更新、テストでの失敗
私はこれを検証するためにすべてを行った。 Postman経由で渡されるJSONは、私のテストから生成したのと同じJSONです。 Postman経由でエンティティを更新するとうまくいきます。 mockMvc
による更新が失敗しています。まず、それは400で失敗していたと私は次のエラーを得ていた。
Could not read document: Already had POJO for id (java.lang.Long) [[ObjectId: key=1, type=com.fasterxml.jackson.databind.deser.impl.PropertyBasedObjectIdGenerator, scope=java.lang.Object]] (through reference chain: com.foo.Department["id"])
をいくつかの研究を行った後、私は部門の@JsonIdentityInfo
にscope=Department.class
を追加することになりました。この問題は解決しましたが(なぜ私は本当に理解できませんが)、デバッガを介してエンティティを見ているときに、@OneToOne
という関係プロパティがnullであると主張しているため、失敗しました。
@Entity
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property="id", scope = Department.class)
@JsonRootName(plural = "departments", singular = "department")
public class Department {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@NotNull
@Size(min = 5, max = 150)
private String name;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "brand_id")
@JsonBackReference("brand-departments")
private Brand brand;
@OneToOne(fetch = FetchType.LAZY)
@NotNull
@JoinColumn(name = "department_group_id")
private DepartmentGroup departmentGroup;
@NotNull
@Size(max = 10)
private String shortDescription;
// getters and setters
}
は再び、すべてが経由だけで正常に動作し、ポストマンからJSONを投稿:
は、ここに私のDepartment
エンティティです。それは私のテストを実行するときだけ壊れます。ここに私のテストはあります: