Spring Data JPAで使用されるSpring Data Restに問題があります。私はSpringブート1.4.4.RELEASEを使用しています。ここでSpringデータの残りとjpa @OneToManyは "_links"を複製します
は私の春・データ・休息のリポジトリである:ここでは
public interface ProfileJpaRepository extends JpaRepository<Profile, Long> {
}
は私のエンティティ(ゲッターとセッター簡潔にするために示されていない)です。エンティティを作成するために
@Entity
@Table(name = "PROFILE")
public class Profile {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private String description;
// Don't use mappedBy="profile" because attributes are not persisted properly
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "PROFILE_ID")
private Set<Attribute> attributes;
...
}
Attribute.java
@Entity
@Table(name = "ATTRIBUTE")
public class Attribute {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "ID")
private Long id;
private String uri;
@ManyToOne(fetch = FetchType.EAGER)
private Profile profile;
@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name="ATTRIBUTE_DATAS")
private List<String> datas = new ArrayList<>();
public Attribute() {}
public Attribute(String uri, List<String> datas) {
this.uri = uri;
this.datas = datas;
}
...
}
POST "http://localhost:8880/profiles" 上:
Profile.java I
{
"description" : "description-value",
"attributes" : [
{
"uri" : "uri-a",
"datas" : ["uri-a-value"]
},
{
"uri" : "uri-b",
"datas" : ["uri-b-value"]
}
]
}
そして、ここではその結果でありますヒットhttp://localhost:8880/profiles:
{
"_embedded" : {
"profiles" : [ {
"description" : "description-value",
"attributes" : [ {
"uri" : "uri-a",
"datas" : [ "uri-a-value" ],
"_links" : {
"profile" : {
"href" : "http://localhost:8880/profiles/1"
}
}
}, {
"uri" : "uri-b",
"datas" : [ "uri-b-value" ],
"_links" : {
"profile" : {
"href" : "http://localhost:8880/profiles/1"
}
}
} ],
"_links" : {
"self" : {
"href" : "http://localhost:8880/profiles/1"
},
"profile" : {
"href" : "http://localhost:8880/profiles/1"
}
}
} ]
},
"_links" : {
"self" : {
"href" : "http://localhost:8880/profiles"
},
"profile" : {
"href" : "http://localhost:8880/profile/profiles"
}
},
"page" : {
"size" : 20,
"totalElements" : 1,
"totalPages" : 1,
"number" : 0
}
}
すべての属性の下で"_links"
が指定されているため、問題があると思います。私はJpaRepositoryにMongoRepositoryからの切り替え、およびMongoRepositoryを使用している
{
"_embedded" : {
"profiles" : [ {
"description" : "description-value",
"attributes" : [ {
"uri" : "uri-a",
"datas" : [ "uri-a-value" ]
}, {
"uri" : "uri-b",
"datas" : [ "uri-b-value" ]
} ],
"_links" : {
"self" : {
"href" : "http://localhost:8880/profiles/1"
},
"profile" : {
"href" : "http://localhost:8880/profiles/1"
}
}
} ]
},
"_links" : {
"self" : {
"href" : "http://localhost:8880/profiles"
},
"profile" : {
"href" : "http://localhost:8880/profile/profiles"
}
},
"page" : {
"size" : 20,
"totalElements" : 1,
"totalPages" : 1,
"number" : 0
}
}
注、これら"_links"
が「重複」されませんでした。むしろ、私はこのような何かを期待しているだろう。
誰かがこれにいくつかの光を当てることができますか? JPAエンティティで何かを間違って構成しましたか?残りのリポジトリに何かを設定する必要はありますか?依存関係のバージョンについて
詳しい情報はここで見つけることができます、あなたがそれを必要とする必要があり、私はこれらの(http://docs.spring.io/spring-boot/docs/1.4.4.RELEASE/reference/html/appendix-dependency-versions.html)
感謝を上書きしませんでした。
をあなたはどのように/なぜ_links知っていますかあなたのコードを生成されますか?私はJSON-Serialization中にそれが起こったと仮定していますが、私はそれらをデフォルト設定で使用したことはありません。 –
@トルステンN。これはProfileJpaRepositoryによって自動的に行われ、Spring Data RestはJpaRepositoryを拡張し、自動的にメディアタイプとしてHALを使用してドメインモデルのための発見可能なREST APIを公開します。 – Nis