私には調査と情報の2つのエンティティがあります。
調査エンティティ:
@RooJavaBean
@RooToString
@RooJpaActiveRecord(table = "information")
@JsonPropertyOrder({ "seq"})
public class Information {
@NotNull
private String title;
@ManyToOne(fetch = FetchType.LAZY)
@JsonBackReference
private Survey survey;
private int seq;
}
情報エンティティ:
@RooJavaBean
@RooToString
@RooJpaActiveRecord(table = "survey")
public class Survey {
@NotNull
@Size(min = 3, max = 50)
private String title;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy="survey")
@JsonManagedReference
private Set<Information> informations = new HashSet<Information>();
}
私はジャクソンを使ってシリアル化しました。
私が期待すること:
{
"survey" : {
"title" : "Medical Survey",
"informations" : [ {
"id" : 1,
"seq" : 0,
"title" : "Name:",
"version" : 0
}, {
"id" : 2,
"seq" : 1,
"title" : "Age:",
"version" : 0
}, {
"id" : 3,
"seq" : 2,
"title" : "test",
"version" : 0
}, {
"id" : 4,
"seq" : 3,
"title" : "test",
"version" : 0
} ],
"id" : 1,
"version" : 134
}
}
しかし、それが出てくるもの:
{
"survey" : {
"title" : "Medical Survey",
"informations" : [ {
"id" : 2,
"seq" : 1,
"title" : "Age:",
"version" : 0
}, {
"id" : 4,
"seq" : 3,
"title" : "test",
"version" : 0
}, {
"id" : 3,
"seq" : 2,
"title" : "test",
"version" : 0
}, {
"id" : 1,
"seq" : 0,
"title" : "Name:",
"version" : 0
} ],
"id" : 1,
"version" : 134
}
}
- この場合、listを使用する方が適しているはずですが、SpringRooはscaffoldでlistをサポートできません。したがって、seq番号を含むHashSetを使用しました。
- また、@transientになる情報の配列リストを作成し、それをビジネスレイヤーで複製して並べ替えることができることも知っています。
しかし、よりクリーンな解決策、つまりシリアル化時の注文があるかどうかを知りたいです。ありがとう。