In my Entity class I have a reference to an EntityListener. I want to make the access to the request user using a ThreadLocal.
Can someone provide me with an example or point me in the right direction? The example below does not works!!
public final class UserIdHelper {
private static final ThreadLocal<String> userIds = new ThreadLocal<>();
public static void setCurrentUserId(String userId) {
userIds.set(userId);
}
public static String getCurrentUserId() {
return userIds.get();
}
public static void removeCurrentUserId() {
userIds.remove();
}
}
public class EmployedController extends Controller {
@Transactional
public Result example() {
try {
UserIdHelper.setCurrentUserId("test");
Employed emp = EmployedRepository.merge(Json.fromJson(request().body().asJson, Employed.class));
EmployedRepository.save(emp);
return ok( Json.toJson(emp) );
} finally {
UserIdHelper.remove();
}
}
}
@EntityListener(EmployedListener.class)
class Employed {
private Long id;
private String createdBy ;
/// getters & setters
}
class EmployedListener {
@PreUpdate
private void preUpdate(Employed emp) {
emp.createdBy = UserIdHelper.getCurrentUserId(); // NULL !!!!!!
}
}