ich ein einfaches Repository für meine App-Benutzer erstellt haben:@RepositoryEventHandler nicht aufgerufen zu werden
@RepositoryRestResource(path = "users")
public interface AppUserRepository extends JpaRepository<AppUserModel, Long> {
List<AppUserModel> findByUsername(@Param("username") String username);
}
Ich brauche aber von Passwort-Verschlüsselung kümmern, bevor ein neuer Benutzer eingefügt wird. Dazu implementiert ich ein @RepositoryEventHandler
:
@RepositoryEventHandler(AppUserModel.class)
public class AppUserService {
@HandleBeforeSave
public void handleProfileSave(AppUserModel appUserModel) {
System.out.println("Before save ..");
}
@HandleBeforeCreate
public void register(AppUserModel appUserModel) {
System.out.println("Before create ..");
}
}
Das Problem ist, dass keiner der beiden Event-Handler ausgeführt zu werden. Als Ergebnis AppUserModel
wird versucht, dauerhaft zu sein, aber scheitert, weil kein Salz (für das Passwort) generiert und eingestellt wurde - so kann ich sagen, dass die JpaRepository<AppUserModel, Long>
funktioniert soweit.
{
"cause": {
"cause": {
"cause": null,
"message": "ERROR: null value in column "password_salt" violates not-null constraint Detail: Failing row contains (26, 2017-11-18 21:21:47.534, 2017-11-18 21:21:47.534, f, asd, null, [email protected])."
},
"message": "could not execute statement"
},
"message": "could not execute statement; SQL [n/a]; constraint [password_salt]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement"
}
Oh. Ich habe gerade eine andere Lösung gefunden, die '@ Bean' in einer weiteren Konfigurationsklasse verwendet. Das hat auch funktioniert und ich werde das als eine andere Antwort veröffentlichen, aber Ihre Lösung ist natürlich viel einfacher. – displayname