私はSpring-mvcで簡単な辞書RESTful APIを開発しています。関連エンティティ上記コードに基づい外部キーを使用してオブジェクトを保存するための専門的/標準的な方法は何ですか?
public class Word {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String word;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="LANGUAGE_ID", insertable=false, updatable=false)
private Language language;
}
がLanguage
である2つの関連するエンティティが存在します。
問題:私は、POST要求でWordエンティティにCREATE操作を実装したいと思います。実装は難しいことではありませんが、私はPOSTリクエストURLとJSONのリクエストボディに関連して、少なくとも2つの解候補を見つけた:
ソリューションCandicate I:直接JSONボディ要求に挿入します。 JSON本体は、ネストされたJSONオブジェクトが含まれている - 言語、
{id:1, word:"hello", Language: {id:1, language:"English"}}
参照のようなもの:Spring: Save object with foreign keys with a POST request
ソリューション候補II:POSTリクエストのURLを介して参照言語IDを取得し、
のような何かを言うとこのようPOST http://localhost:8080/rest/language/1/words
、全くLanguage
基準Aが存在しませんJSON POSTリクエスト本体のすべてを返します。
参照:https://www.youtube.com/watch?v=_Jnu_jHfQbM
I持っている2つの質問:
質問1:これら二つの解の候補のうち、より良い1、または言うプロの標準的なソリューションですか?または他の解決策がありますか?
質問2:両方与えられた解候補にとして、どのような場合には、我々は、少なくとも対応するcontroller
クラスで参照Language
POJOを取得する必要があります。しかし、OO設計の原則の観点から見ると、この方法はコントローラと緊密に結びついているように思われるので、私はこの検索動作をコントローラ以外のどこかで切り離す必要があると考えていますか?例えば、service
層にある。しかし、これはプロの方法ですか?対応するDTOが必要ですか?
まずはあなたのアドバイスをありがとうございました:)「あなたのエンティティ用に別々のモデルクラスを作成する」とはどういう意味ですか?私は2つの別個のエンティティ、言葉と言葉を持っていました。おそらく私はDTOを持っているべきですか?あなたが与えたTestModelはちょっとDTOですか? – Rui
はい、私はコントローラのエンティティを使用して好きではありません。だから私は必要な対応するエンティティの値を保持する別のクラスを作成します。 –