spring-boot - 如何使用 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 Data JPA 在 JPA 之上的抽象层中,因此您应该使用该save()
方法而不是EntityManager
smerge()
或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);
}
}
推荐阅读
- pandas - 如何在熊猫中将行值组合成新行
- javascript - 如何将 Map 值设置为数组?
- spring - 使用 Postman 为 Spring Boot 发布请求返回 404
- api - 有什么方法可以从 Facebook Search Places API 获取随机位置?
- c# - 将列表列表绑定到 ListView 并将它们分组
- javascript - 创建 React 应用程序:在 node_modules 中转换外部包的 JSX
- amazon-cognito - 如何在 AWS Amplify graphql 架构中公开字段?
- javascript - 获取调用中的 React API 处理错误:TypeError-无法读取未定义的属性“temp”
- python - 如何将文本文件转换为 Excel 文件,而不删除数据之间的空格
- node.js - 将php restapi调用转换为节点axios