2016-04-07 31 views
0

4 yıldır Grails'i kullandıktan sonra Spring Boot'da yeni bir projeye başladım. Grails'te Bir db tablosundaki ilişkilendirme satırını güncelleştirmek için etki alanı sınıfının bir örneğinin properties alanını kullandım. Domain.properties atama genellikle bir hizmet içinde yapıldı. properties alanı, bir web formundan gelen verilerle ayarlandı. Bu yaklaşım, n atama öğesinin yazılması yerine, bir etki alanı örneğinin tek bir satıra güncellenmesine izin verir; burada n, etki alanı sınıfında tanımlanan özniteliklerin sayısıdır.İlkbaharda Grails Domain özellikleri alanına benzer bir şey var mı?

Şimdi sorun .. İlkbaharda benzer bir şey var mı? Ben ilkbaharda Benzer bir şey yapmak istiyorum:

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

Biraz detay, Benim denetleyicisi eklemek

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

My Servis Şimdi

@Service 
public class RadioService { 
... 

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

web formu explicity yapmazsa Radyoda tanimlanan tüm alanlarin gönderilmesi Sorun oldugumdan beri kayitli olan alanin degerini kaybedecegim. Bunun

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

gibi Somthing yazabilirsiniz Eğer harika olurdu.
İkinci yöntemde, yalnızca haritadaki özellikler (web formundakiler) güncellenecek ve radyo örneğinin diğer mağaza alanı el değmemiş olacaktır.

cevap

0

Spring Data JPA'a bir göz atın, etki alanı nesnelerini kimliğe göre yükleyebilir, gelen istek parametrelerini etki alanı nesnelerine bağlayabilir ve ayrıca bazı CRUD depolarını otomatikleştirebilirsiniz.

+0

Merhaba, Spring Data JPA'yı kullanıyorum. Daha açık olması için sorumu daha ayrıntılı olarak güncelledim. Thx –

+0

Ah, özür dilerim, her zaman bu ön tarafı ele alıyorum. Daha karmaşık ciltleme için @InitBinder kullanarak gizli alanlar veya sunucu tarafı kullanarak. Belki Spring's BeanUtils size yardımcı olabilir - http://docs.spring.io/spring-framework/docs/current/javadoc-api/index.html?org/springframework/beans/BeanUtils.html –

+0

Tamam teşekkürler, kontrol ederim .. ama benim kendi kendime uygulamak zorundayım. :-) –