2016-06-13 5 views
0

春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"]) 

をいくつかの研究を行った後、私は部門の@JsonIdentityInfoscope=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エンティティです。それは私のテストを実行するときだけ壊れます。ここに私のテストはあります:

答えて

0

私はアプリが実行されているがテスト用ではないときにこれがなぜ機能していたのか判断しました。 IDが重複している場合は、scope属性が@JsonIdentityInfoとなります。アプリを実行すると、DepartmentとDepartmentGroupはidの値が異なっていましたが、私のテストでは両方とも1.両方のエンティティにscopeを追加すると問題が解決しました。

関連する問題