Wpis z mikrobloga

Mirki, uczę się Spring Boota, tworzę prostą aplikację i niestety trafiłem na problem. Mam model User który wygląda jak poniżej

@Entity
@Table( name="users" )
public class User {

@Id @GeneratedValue
private Long id;

@NotEmpty(message = "Pole LOGIN nie może być puste")
@Size(min = 10, message="pole LOGIN musi zawierać minimum 10 znaków")
@Column(name="login", unique=true, nullable=false )
private String login;

@NotEmpty(message = "Pole HASŁO nie może być puste")
@Column( nullable=false )
private String password;

@NotEmpty(message = "Pole E-MAIL nie może być puste")
@Column ( nullable=false )
private String email;

(...)
}

Mam metodę którą tworzę użytkownika, dodaje go do bazy wszystko śmiga, ale problem zaczyna się gdy chcę wykonać aktualizację profilu użytkownika. Formularz pobiera dane użytkownika, zmieniam np. jego login, zapisuję i dostaję errora z walidacji "pole hasło nie może być puste" co jest logiczne, bo mam adnotację @NotEmpty i teraz pytanie - Jak operować na tym modelu przy aktualizacji rekordu, ale nie zmieniając hasła? Chyba,że to robię źle to jeśli mogę prosić o wskazanie poprawnego rozwiązania to byłbym wdzięczny. #java #programowanie #spring #naukaprogramowania
  • 8
@fegwegw:
Tak to wygląda w mojej aplikacji

@Controller
public class UserController {

private UserService productService;

@Autowired
public void setUserService(UserService userService) {
this.userService = userService;
}

@RequestMapping(value = "user/create", method = RequestMethod.POST)
public String saveUser(User user){

userService.saveUser(user));
return "redirect:/user/" + user.getId();
}
}

public interface UserService {
User getUserById(Long id);
User saveUser(User user);
}

@Service
public class UserServiceImpl implements UserService, UserDetailsService {
private UserRepository userRepository;

@Autowired
public UserServiceImpl(UserRepository userRepository){
this.userRepository =
@coskoduje: A, czekaj, chyba źle zrozumiałem problem. Ty po prostu wysyłasz cały obiekt User do aktualizacji, ale pole password masz puste (co jest logiczne), i chcesz zrobić update mimo to?

To musisz zamiast robić save() od razu z obiektem, który dostajesz w żądaniu, najpierw pobrać go z bazy:

saveUser(User user) {
User userToUpdate = userRepository.getUserById(user.getId());

// i tutaj aktualizacja składowych
}

Aktualnie Twój 'user' z żądania znajduje się poza sesją Hibernate'a,