Grailsを4年間使ってSpring Bootで新しいプロジェクトを開始しました。 Grailsでは、ドメインテーブルのインスタンスのプロパティフィールドを使用して、dbテーブルの関連する行を更新しました。 domain.propertiesの割り当ては通常、サービス内で行われました。 properties
フィールドは、Webフォームからのデータで設定されていました。 このアプローチでは、n assignemntを記述するのではなく、ドメインインスタンスを1行で更新できます.nは、ドメインクラスで定義されている属性の数です。SpringのGrailsドメインのプロパティフィールドに似たものがありますか?
今質問がありますか?春には何か類似していますか? 私は春に似た何かをしたいと思います:
update(Long radioId,Map properties) {
// get the radio to be update from the db
Radio radio = getRadio(radioId)
radio.properties = properties
save(radio)
}
Webフォームは、明示的にしない場合、私は、 マイコントローラ
public ModelAndView updateRadio(Radio radio) {
radioService.update(radio);
return new ModelAndView("redirect:/superadmin/radio/"+radio.getIdentifier()+"/zoom");
}
マイサービス今
@Service
public class RadioService {
...
public void update(Radio radio) {
assert radio.getId() != null;
radioRepository.save(radio);
}
...
}
をいくつかの詳細を追加ラジオで定義されたすべてのフィールドを送信する私は既に格納されているフィールドの値を失うので、問題があります。 私はそれは素晴らしいことだその
public void update(Map radioProperties,Long radioId) {
Radio radio = radioRepository.findById(radioId);
radio.properties = radioProperties // only properties present in this map will be update (in grails)
radioRepository.save(radio);
}
のように気にいらを書くことができます。
後者の方法では、マップ内のプロパティ(Webフォーム内)のみが更新され、無線インスタンスの他のストアフィールドは変更されません。
こんにちは、私はSpring Data JPAを使用しています。私はより明確になることを望む、より詳細で私の質問を更新しました。 Thx –
ああ、申し訳ありませんが、私はいつもこのフロントエンドを処理しました。より複雑なバインディングのために@InitBinderを使用して、隠しフィールドまたはサーバー側を使用します。たぶん、SpringのBeanUtilsがあなたを助けることができます - http://docs.spring.io/spring-framework/docs/current/javadoc-api/index.html?org/springframework/beans/BeanUtils.html –
ありがとう、私はそれをチェックする..しかし、私は自分自身で実装する必要があるようです。 :-) –