Spring中的JPA持久性上下文和数据库操作

时间:2019-06-09 18:30:10

标签: spring jpa persistence

我正在一个必须执行简单CRUD操作的Spring项目中工作。但是,我不知道它是如何工作的...我有几个问题:

  1. 当我调用JpaRepository方法时,它们会在数据库中准确地执行这些操作吗?
  2. 如果插入成功与否,我可以使用JpaRepository执行插入并获得响应的最佳方法是什么?
  3. 持久性上下文如何以及何时真正在数据库中完成操作? (ps:一个图表会很有帮助)
  4. 我应该自己使用flush还是让Spring和JPA帮我解决这个问题?

1 个答案:

答案 0 :(得分:0)

只需提一下:所有这些问题都可以通过Google轻松找到,并且在现有问题中已经部分得到了回答。

1取决于您使用的操作:

  • 如果您的方法上带有@Transactional批注,它将在该方法的末尾(最高级)提交所有操作。
  • 请紧记:有不同类型的事务(例如,require_new将创建挂起父级,然后在提交新的continue父级后创建新的事务)
  • 如果您使用.saveAndFush(xx),则会立即将其刷新
  • 如果您不使用显式事务,则其行为会有所不同

2您创建一个实体+一个存储库,然后调用.save方法 例如

@Entity
public class Artist {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
}

public interface ArtistRepository extends JpaRepository<Artist, Long> {}

如果插入语句未成功执行,则将引发异常。

3我认为已经用1回答了

4我建议使用事务并让spring处理它,但这在很大程度上取决于项目的需求。

我希望这对您有所帮助,但您只是先做一个教程即可。