Another scenario:
1) both thread-1 and thread-2 find memberMethod == null and enter block to initialize memberMethod;
2) thread-1 initializes memberMethod and makes it accessible;
3) thread-2 overwrites memberMethod with a different Method, because Class#getDeclaredMethod returns a copy of the requested Method;
4) thread-1, attempts to invoke the method before thread-2 makes the overwritten memberMethod accessible, resulting in HibernateException being thrown.