首页 > 解决方案 > 如何使用 Spring Boot 调用 JPA 方法?

问题描述

我使用 spring Initializr 创建了一个 Spring Boot 项目,选择了 Web 和 JPA 依赖项。

我可以进行休眠调用,例如 save() - 但是 JPA 方法(例如 persist()、merge())不可用。

//JpRepository.java

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface JpRepository extends JpaRepository<Jp, Long> {
}

//JpServiceImpl
import com.jp.jp.db.JpRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import java.util.*;

@Service
public class JpServiceImpl {

    @Autowired
    private JpRepository jpRepository;

    @Transactional
    public void readJp() {

        jpRepository.save(jp);   // is available
        jpRepository.merge(jp);  // this method is not available

    }
}

}

标签: spring-bootjpaspring-data-jpa

解决方案


Spring Data JPA 在 JPA 之上的抽象层中,因此您应该使用该save()方法而不是EntityManagersmerge()persist(). Spring Data JPA 为您做到这一点。查看源代码SimpleJpaRepository save()

@Transactional
@Override
public <S extends T> S save(S entity) {
        if (entityInformation.isNew(entity)) {
            em.persist(entity);
            return entity;
        } else {
            return em.merge(entity);
        }
}

推荐阅读