Jpa Spring数据:自动连接@服务和直接自动连接存储库之间有什么区别

Jpa Spring数据:自动连接@服务和直接自动连接存储库之间有什么区别,jpa,spring-data-jpa,springsource,Jpa,Spring Data Jpa,Springsource,我使用的是SpringDataJPA,在我的持久性层中,使用这两个存储库来访问数据库,有时还使用 1) 包含存储库的服务类,然后自动连接服务 2) 直接自动连接存储库 这两种方法的行为方式是否相同?直接使用存储库与从服务中使用存储库有什么区别 存储库: package com.me.repository; import com.me.myentities.MyEntity; import org.springframework.data.jpa.repository.JpaRepositor

我使用的是SpringDataJPA,在我的持久性层中,使用这两个存储库来访问数据库,有时还使用 1) 包含存储库的服务类,然后自动连接服务 2) 直接自动连接存储库

这两种方法的行为方式是否相同?直接使用存储库与从服务中使用存储库有什么区别

存储库:

package  com.me.repository;

import com.me.myentities.MyEntity;
import org.springframework.data.jpa.repository.JpaRepository;


public interface MyEntityRepository extends JpaRepository<MyEntity, Long> {
}

无论哪种方式,您都在使用同一种具体的存储库对象,它是在容器加载时由Spring创建的。如果你不做任何作用域的事情,你就是在使用对同一个对象的引用

这些方法的工作原理相同吗?如果服务只对代理存储库进行传递调用,那么它不会导致任何不同的最终行为。如果这种传递行为是服务所做的全部,那么它就没有存在的内在原因

SpringDataJPA提供了向存储库添加自定义行为的标准方法,或者将存储库的行为限制为一组较小的方法。SpringDataJPA文档(虽然简短)提供了这些技术的演示

最终结果是一样的,但通常您会发现直接使用存储库更简洁

package  com.me.service;
import   com.me.entities.*;

import org.springframework.stereotype.Service;
import  com.me.repository.*;
import javax.annotation.Resource;

@Service
public class MyService {

@Resource
private MyEntityRepository myEntityRepository ;

public void update(MyEntity myEntity)
{
    myEntityRepository.save(myEntity);
}
}