2017-01-14 16 views
3

非常に単純な一対多の関係 - 人間から多くのペットまで。春のデータレストJPA OneToMany Null JoinColumn

@Entity 
class Human{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    @OneToMany(mappedBy="human", cascade={CascadeType.ALL}) 
    private List<Pet> pets; 

    // other fields 
} 

@Entity 
class Pet{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    @ManyToOne(cascade=CascadeType.ALL) 
    @JoinColumn(name="human_id") 
    private Human human; 

    // others fields 
} 

これは、2つの表の結果は、ヒト(ID)PET(ID、human_id)を作成しました。

EDIT-1:ここで私はデータを掲載していますどのように更新を見ている:私は春データ休息

<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-rest</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-jpa</artifactId> 
    </dependency> 

EDIT-2を使用しています。 は、と私は人間に掲示しています:

{ 
    // human data 

    "pets": [ 
    "http://localhost/pets/1", 
    "http://localhost/pets/2" 
    ] 
} 

問題がnullあるPETテーブルのhuman_id列を。他のフィールドはすべて検索されますが、関係は確立されません。

私には何が欠けていますか?

+0

可能な重複[春データRESTとJPAとの双方向の関係を維持するには?](http://stackoverflow.com/questions/30464782/how-to-maintain-bi-directional-relationships --with-spring-data-rest-and-jpa) –

答えて

0

まず、@ ManyToOne列のCascadeType.ALLを使用すると危険です。 ペットが削除されているときに人間を削除することができます。

そして、仲間の後

保存ハマン各オブジェクト

Human human = new Human(); 
Pet pet1 = new Pet(); 
pet1.setHuman(human); 
Pet pet2 = new Pet(); 
pet2.setHuman(human); 

List<Pet> pets = new ArrayList<Pet>(); 
pets.add(pet1); 
pets.add(pet2); 

human.setPets(pets); 

そして、私はmappedByを削除し、側面に沿って@JoinColumnを置くことによって持続関係を得ることができたhuman

+0

Jaehyun、ありがとう、しかし私はSpring Data Restを使用していますが、このようなオブジェクトを設定することはできません。それはジャクソンを通ってHibernateにまっすぐ入る。 – szxnyc

+0

@szxnyc投稿体を書くことができますか? –

+0

ペット関係を投稿するために使用しているURLを追加しました。私は実際のペットの定義ではなく、私がURLを使っているのを見たいと思っています。 – szxnyc

1

を保存@OneToMany。

問題がありますか?パフォーマンスの問題?

@Entity 
class Human{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    @JoinColumn(name="human_id") 
    @OneToMany(cascade={CascadeType.ALL}) 
    private List<Pet> pets; 

    // other fields 
} 

@Entity 
class Pet{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    @ManyToOne(cascade=CascadeType.ALL) 
    private Human human; 

    // others fields 
} 
関連する問題