2016-04-07 10 views
0

Ich habe ein neues Projekt in Spring Boot gestartet, nachdem ich 4 Jahre Grails benutzt habe. In Grails habe ich das Eigenschaftsfeld einer Instanz einer Domain-Klasse verwendet, um die assoziierte Zeile in einer db-Tabelle zu aktualisieren. Die Zuweisung von domain.properties erfolgte normalerweise innerhalb eines Dienstes. Das Feld properties wurde mit Daten aus einem Webformular festgelegt. Dieser Ansatz ermöglicht es, eine Domäneninstanz mit einer einzelnen Zeile zu aktualisieren, anstatt n assignemnt zu schreiben, wobei n die Anzahl der in der Domänenklasse definierten Attribute ist.Etwas ähnlich zu Grails Domain-Eigenschaften im Frühjahr?

Nun die Frage .. gibt es etwas ähnliches im Frühjahr? Ich mag etwas ähnliches im Frühjahr tun:

update(Long radioId,Map properties) { 
     // get the radio to be update from the db 
     Radio radio = getRadio(radioId) 
     radio.properties = properties 
     save(radio) 
} 

ich einige Details hinzufügen, Mein Controller

public ModelAndView updateRadio(Radio radio) { 
     radioService.update(radio); 
     return new ModelAndView("redirect:/superadmin/radio/"+radio.getIdentifier()+"/zoom"); 
    } 

Mein Service

@Service 
public class RadioService { 
... 

    public void update(Radio radio) { 
      assert radio.getId() != null; 
      radioRepository.save(radio); 
    } 
... 
} 

Nun, wenn das Web-Formular nicht explizit tut sende alle in Radio definierten Felder Ich habe ein Problem, da ich den Wert des bereits gespeicherten Feldes verlieren werde. Wenn ich somthing wie die

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); 
} 

schreiben könnte, wäre es toll.
Bei der letzteren Methode werden nur die Eigenschaften in der Karte (ence in der Webform) aktualisiert, und das andere Speicherfeld der Funkinstanz bleibt unberührt.

Antwort

0

Werfen Sie einen Blick auf Spring Data JPA, kann es Domain-Objekte durch ID laden, eingehende Anfrage Parameter an Domain-Objekte binden und auch Sie einige CRUD-Repositories automatisch.

+0

Hallo, ich bin bereits mit Spring Data JPA. Ich habe meine Frage mit mehr Details aktualisiert, in der Hoffnung, klarer zu sein. Thx –

+0

Ah, tut mir leid, ich habe dieses Front-End immer behandelt, z. Verwenden Sie versteckte Felder oder Server-Seite mit @InitBinder für komplexere Bindung. Vielleicht kann Spring's BeanUtils Ihnen helfen - http://docs.spring.io/spring-framework/docs/current/javadoc-api/index.html?org/springframework/beans/BeanUtils.html –

+0

Ok danke, ich würde es überprüfen .. aber es scheint, dass ich von mir selbst implementieren muss. :-) –