私は非常に簡単なスプリングブート+スプリングデータ休止アプリケーションを持っています。私は春のデータを使用して1対1のマッピングを持つエンティティを保存しようとしましたが、親だけが保存されているように見えますが、子はありません。以下 は私のコードは、しかし、私はhttp://localhost:8080/api/ を訪れる場合、私はその後、私はhttp://localhost:8080/api/personsを訪問応答スプリングデータの残りの部分に1対1のマッピングを持つエンティティを保存します
{
_links: {
addresses: {
href: "http://localhost:8080/api/addresses{?page,size,sort}",
templated: true
},
persons: {
href: "http://localhost:8080/api/persons{?page,size,sort,projection}",
templated: true
},
profile: {
href: "http://localhost:8080/api/profile"
}
}
}
下に見て、これまでのすべてのものが良いです
{
"_embedded": {
"persons": [
{
"address": {
"country": "US",
"state": "SV"
},
"name": "Vincent",
"_links": {
"self": {
"href": "http://localhost:8080/api/persons/1"
},
"person": {
"href": "http://localhost:8080/api/persons/1{?projection}",
"templated": true
},
"address": {
"href": "http://localhost:8080/api/persons/1/address"
}
}
}
]
},
"_links": {
"self": {
"href": "http://localhost:8080/api/persons"
},
"profile": {
"href": "http://localhost:8080/api/profile/persons"
},
"search": {
"href": "http://localhost:8080/api/persons/search"
}
},
"page": {
"size": 20,
"totalElements": 1,
"totalPages": 1,
"number": 0
}
}
起動後
@SpringBootApplication
public class Application{
@Autowired
private PersonRepository personRepo;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
CommandLineRunner init(){
Address address = new Address();
address.setCountry("US");
address.setState("SV");
Person person = new Person();
person.setName("Vincent");
person.setAddress(address);
personRepo.save(person);
return null;
}
}
@Entity
public class Address implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private int id;
private String country;
private String state;
}
@Entity
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private int id;
private String name;
@OneToOne(cascade={CascadeType.ALL})
private Address address;
}
@Projection(name="inlineAddress",types={Person.class})
public interface InlineAddress {
String getName();
Address getAddress();
}
@RepositoryRestResource(excerptProjection=InlineAddress.class)
public interface PersonRepository extends JpaRepository<Person, Integer> {
Person findByName(@Param("name") String name);
Person findById(@Param("id") int id);
Page<Person> findByNameStartsWith(@Param("name") String name, Pageable page);
}
public interface AddressRepository extends JpaRepository<Address, Integer> {
}
です、投稿後投稿http://localhost:8080/api/persons/と
それは、以下を示すアドレスはマイケル
{
"_embedded": {
"persons": [
{
"address": {
"country": "US",
"state": "SV"
},
"name": "Vincent",
"_links": {
"self": {
"href": "http://localhost:8080/api/persons/1"
},
"person": {
"href": "http://localhost:8080/api/persons/1{?projection}",
"templated": true
},
"address": {
"href": "http://localhost:8080/api/persons/1/address"
}
}
},
{
"address": null,
"name": "Michael",
"_links": {
"self": {
"href": "http://localhost:8080/api/persons/2"
},
"person": {
"href": "http://localhost:8080/api/persons/2{?projection}",
"templated": true
},
"address": {
"href": "http://localhost:8080/api/persons/2/address"
}
}
}
]
},
"_links": {
"self": {
"href": "http://localhost:8080/api/persons"
},
"profile": {
"href": "http://localhost:8080/api/profile/persons"
},
"search": {
"href": "http://localhost:8080/api/persons/search"
}
},
"page": {
"size": 20,
"totalElements": 2,
"totalPages": 1,
"number": 0
}
}
のために挿入されますされていないように見える私のコードに何か問題があります
{
"name": "Michael",
"address": {
"country": "US",
"state": "SV"
}
}
?私は春のデータの残りを使用せずに古いアプローチを使用してみましたが、残りのコントローラを使用して、私が投稿した同じjsonはうまくいきました。なぜ春のデータ休憩がここでは機能しないのか分かりません。
OKに
{"country":"US,"state":"SV:}
、 と最後のプット・アドレスでアドレスを掲示しなければなりません。これを行う方法はないと思われる。 {"国" = "マイケル"}で人を投稿し、{"国": "国": "SV:}でアドレスを投稿し、この人に最後に住所を付ける必要があります{ \t "name": "Michael"、 \t "address": "http:// localhost:8080/addresses/1" } – vincent