При использовании нового выпуска Spring Data Evans приятно использовать некоторые из приятных вещей, которые поставляются с java 8. Одна из них - это реализация по умолчанию в интерфейсах. В репозитории ниже используется QueryDSL, чтобы сделать запрос безопасным.
Моя проблема в том, что раньше, когда я писал это, я использовал шаблон отдельного интерфейса UserRepositoryCustom
для findByLogin
, а затем еще один класс UserRepositoryImpl
, и в этом классе я бы имел @PersistenceContext
, чтобы получить текущий EntityManager
.
Как получить EntityManager
, когда у меня нет класса? Возможно ли это?
@Repository
public interface UserRepository extends JpaRepository<User, UUID> {
final QUser qUser = QUser.user;
// How do I get the entityManager since this is a interface, i cannot have any variables?
//@PersistenceContext
//EntityManager entityManager;
public default Optional<User> findByLogin(String login) {
JPAQuery query = new JPAQuery(entityManager);
User user = query
.from(qUser)
.where(
qUser.deleter.isNull(),
qUser.locked.isFalse(),
qUser.login.equalsIgnoreCase(login)
)
.singleResult(qUser);
return Optional.ofNullable(user);
}
}