パオロ:
私はこれらのオブジェクトを持っています:
@Data
@Entity
@Table
@EqualsAndHashCode(callSuper = true)
public class User extends AbstractEntity implements Serializable {
private static final long serialVersionUID = -55089179131569489L;
private String username;
private String email;
private boolean admin;
private String name;
private String surname;
@OneToMany(mappedBy = "owner")
private List<Ad> ads;
}
そして
@Entity
@Table
@Data
@EqualsAndHashCode(callSuper = true)
public class Ad extends AbstractEntity implements Serializable {
private static final long serialVersionUID = -4590938091334150254L;
private String name;
private String description;
private double price;
@Enumerated(EnumType.STRING)
private Category category;
@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
@JoinColumn(name = "OWNER_ID")
private User owner;
}
私は(すでにデータベースで)タイプUser.classの既存のオブジェクト内部でタイプAd.classの対象とPOSTを実行しようとするサービスは、Adオブジェクトを保存し、結合列「OWNER_IDは、」空のまま。
私は、マッピングが正しいことだと思います。あなたは、問題を把握するために私を助けてもらえますか?
これは私のリポジトリです。
@Repository
@Transactional(readOnly = true)
public interface AdRepository extends PagingAndSortingRepository<Ad, String>
{}
これは私のRestRepositoryです
@RepositoryRestResource(collectionResourceRel = "ad", path = "ad")
public interface AdRestRepository extends PagingAndSortingRepository<Ad, String> {}
Supun Wijerathne:
私は少しバックステップし、あなたの問題を一般化した場合、
あなたはしようとしているPOST のサブリソースをとの両方のアクションを期待します
- 新しいリソースを作る(広告)
- 所有者(ユーザー)との関連付けを行います
1回の呼び出しで起こったことにします。
しかし残念ながら、ばねのデータ-残りがないではない、このような動作をサポート。これを行うには、2回の呼び出しを必要とします。
- リソース(広告)=>作るための一つのPOSTをする
/ads
と実際のペイロード - 協会=>作るために第二にPOSTをする
users/{ownerId}
とHATEOASリンク最初の呼び出しによって作成されたリソースの。
見てみましょう。この公式ドキュメントのセクションを。