如何使用Java 8的默认方法在接口中使用EntityManager实例?

如何使用Java 8的默认方法在接口中使用EntityManager实例?,java,spring,jpa,java-8,spring-data-jpa,Java,Spring,Jpa,Java 8,Spring Data Jpa,我试图在Spring数据存储库的接口中实现默认方法。在Java 8的接口中,我们是否可以使用默认EntityManager的实例 下面是我想要做的理想实现 import org.springframework.data.repository.CrudRepository; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Que

我试图在Spring数据存储库的接口中实现默认方法。在Java 8的接口中,我们是否可以使用默认EntityManager的实例

下面是我想要做的理想实现

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();
   }
}


我们有没有办法实施这样的设计?非常感谢您的帮助。

不是作为接口默认方法,但您可以编写基于JPA的自定义存储库接口实现。 请参阅Spring数据手册示例中的示例和实现

查看有关弹簧数据参考的更多信息:

不是作为接口默认方法,但您可以编写基于JPA的存储库接口自定义普通实现。 请参阅Spring数据手册示例中的示例和实现

查看有关弹簧数据参考的更多信息:
该方法不需要任何自定义实现。让Spring为您生成它:

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

}

唯一需要做的就是稍微调整一下方法名称,让Spring理解它。

该方法不需要任何自定义实现。让Spring为您生成它:

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

}

你唯一需要做的就是稍微调整一下方法名,让Spring理解它。

实际上,我需要用我们自己的自定义方法扩展JPA存储库的功能。此示例仅用于说明目的。某些特定于数据库的操作需要自定义方法。这就是可以为您指明正确方向的方法。您能给出一个您想要实现的特定于数据库的操作的示例吗?谢谢您的帮助。但我会尝试简单的存储库解决方案,因为它符合我的需求。实际上,我需要用我们自己的自定义方法扩展JPA存储库的功能。此示例仅用于说明目的。某些特定于数据库的操作需要自定义方法。这就是可以为您指明正确方向的方法。您能给出一个您想要实现的特定于数据库的操作的示例吗?谢谢您的帮助。但我会尝试普通存储库解决方案,因为它符合我的要求。谢谢您的指导。我一定会尝试这个解决方案。谢谢你的指导。我一定会尝试这个解决方案。