2016-04-07 6 views
0

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フォーム内)のみが更新され、無線インスタンスの他のストアフィールドは変更されません。

答えて

0

Spring Data JPAを見てください。idでドメインオブジェクトをロードし、受信したリクエストパラメータをドメインオブジェクトにバインドして、いくつかのCRUDリポジトリを自動生成することもできます。

+0

こんにちは、私はSpring Data JPAを使用しています。私はより明確になることを望む、より詳細で私の質問を更新しました。 Thx –

+0

ああ、申し訳ありませんが、私はいつもこのフロントエンドを処理しました。より複雑なバインディングのために@InitBinderを使用して、隠しフィールドまたはサーバー側を使用します。たぶん、SpringのBeanUtilsがあなたを助けることができます - http://docs.spring.io/spring-framework/docs/current/javadoc-api/index.html?org/springframework/beans/BeanUtils.html –

+0

ありがとう、私はそれをチェックする..しかし、私は自分自身で実装する必要があるようです。 :-) –

関連する問題