Вы не должны вставлять firstName и lastName в первичный ключ.userId должен быть вашим первичным ключом, и вы должны добавить уникальное ограничение на [firstName, lastName].Кстати, размещение этих дополнительных полей в первичном ключе только гарантирует, что [idUser, firstName, lastName] является уникальным, но у вас все еще могут быть два пользователя с разными idUsers, но с тем же [firstName, lastName].
Теперь, чтобы ответить на исходный вопрос, я не вижу, в чем проблема:
UserId userId = new UserId("theId", "theFirstName", "theLastName");
User user = (User) session.load(User.class, userId);