spring数据保存和hibernate保存有什么区别?

时间:2017-06-07 06:02:45

标签: spring hibernate spring-data-jpa

spring数据import numpy as np from PIL import image def hue_shift(img, amount): hsv_img = img.convert('HSV') hsv = np.array(hsv_img) hsv[..., 0] = (hsv[..., 0]+amount) % 360 new_img = Image.fromarray(hsv, 'HSV') return new_img.convert('RGB') 和hibernate save之间有什么区别?他们的工作方式是否相同?

2 个答案:

答案 0 :(得分:4)

Hibernate的Session.save()是一种专有的Hibernate操作,在JPA中不存在。它基本上与EntityManager.persist()做同样的事情,除了它保证生成ID并返回它。但是,相同的级联不适用,因为Hibernate具有专有的SAVE级联选项,当然在JPA中存在。

Spring-data-jpa的SimpleJpaRepository的保存操作如果实体被认为是新的,则调用EntityManager.persist();如果实体不被认为是新的,则调用EntityManager.merge()

所以不,他们不是一回事,也不会以同样的方式工作。

答案 1 :(得分:4)

如果您完全了解JPA,Hibernate和Spring Data JPA之间的关系,您会更好地理解这一点。

JPA(Java Persistence API)是用于在Java中执行ORM(object-relational mapping)的标准接口规范。请注意,它本身并不实现接口。您需要一个实现JPA规范的库才能在您的软件中使用它。

Hibernate是JPA的一个实现 - 它是一个实现JPA规范的库。

Spring Data JPA是Spring Framework的子项目,它可以更轻松地使用JPA并将其集成到Spring Framework的其余部分中。

如果您使用Spring Data JPA,您还需要在项目中实现JPA,例如Hibernate。

您使用Spring Data JPA提供的接口和类,并与底层JPA实现(Hibernate)进行对话,以实际与数据库通信。

通过Spring Data保存实体JPA最终会调用Hibernate来保存实体,所以最终效果是一样的。

但是:如果您使用的是Spring Data JPA,则不应直接使用Hibernate。实际上,您不应该在自己的代码中直接引用Hibernate。通过在代码中直接使用Hibernate,您将完全绕过Spring Data JPA。