Как использовать экземпляр EntityManager в интерфейсе, используя методы по умолчанию Java 8? - PullRequest
1 голос
/ 08 июля 2020

Я пытаюсь реализовать метод по умолчанию в интерфейсе репозитория Spring Data. Есть ли способ использовать экземпляр EntityManager по умолчанию в интерфейсе Java 8.

Ниже приводится желаемая реализация, которую я хочу сделать.

import org.springframework.data.repository.CrudRepository;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

public interface CustomerRepository extends CrudRepository<Customer, Long> {

   @PersistenceContext
   EntityManager em;

   default List<Customer> findCustomersByCity(String city){
       Query query = em.createNativeQuery("SELECT * FROM customer WHERE city = ?1", Customer.class);
       query.setParameter("city",city);
       return query.getResultList();
   }

}

Есть ли способ реализовать такой дизайн? Любая помощь приветствуется.

Ответы [ 2 ]

3 голосов
/ 08 июля 2020

Не в качестве методов интерфейса по умолчанию, но вы можете написать свою собственную простую реализацию интерфейсов репозитория на основе JPA. См. Реализации CustomerRepository и JpaCustomerRepository в примерах Spring Data Book.

Дополнительные сведения см. Ссылка на Spring Data: 4.6. Пользовательские реализации для репозиториев данных Spring

1 голос
/ 08 июля 2020

Для этого метода не требуется никакой специальной реализации. Позвольте Spring сгенерировать его для вас:

public interface CustomerRepository extends CrudRepository<Customer, Long> {
  
    List<Customer> findAllByCity(String city);

}

Единственное, что вам нужно, - это немного подправить имя метода, чтобы Spring его понимал.

...