天天看点

spring data jpa 小白翻译三(entityManager API)

javax.persistence.EntityManager.persist

使实例被管理和持久化。

如果实体已存在,则在调用persist操作时可能抛出EntityExistsException,或者在flush或commit时抛出EntityExistsException或其他PersistenceException。

如果在PersistenceContextType.TRANSACTION类型的 受容器管理的 实体管理器上调用 该方法 且没有事务 会抛出TransactionRequiredException

javax.persistence.EntityManager.merge

将给定实体的状态合并到当前持久性上下文中。

返回一个状态合并到上下文的托管实例

如果实例不是实体或是分离的实体,会抛出IllegalArgumentException 

如果在PersistenceContextType.TRANSACTION类型的 受容器管理的 实体管理器上调用 该方法 且没有事务 会抛出TransactionRequiredException

javax.persistence.EntityManager.remove

删除实体

如果实例不是实体或是分离的实体,会抛出IllegalArgumentException 

如果在PersistenceContextType.TRANSACTION类型的 受容器管理的 实体管理器上调用 该方法 且没有事务 会抛出TransactionRequiredException

javax.persistence.EntityManager.find

使用指定的属性按主键和锁定查找。搜索指定类和主键的实体,并根据指定的锁类型锁定它。如果实体实例包含在持久性上下文中,则从那里返回它。

如果在持久性上下文中找到实体并且锁模式类型是悲观的且实体具有版本属性,则持久性提供程序必须在获取数据库锁时执行乐观版本检查。如果这些检查失败,则抛出OptimisticLockException。

如果锁定模式类型是悲观的并且找到了实体实例但无法锁定:

•如果数据库锁定失败导致事务级回滚,则抛出PessimisticLockException

•如果数据库锁定失败仅导致语句级回滚,则将引发LockTimeoutException

如果无法识别特定于供应商的属性或提示,则会以静默方式忽略它。

便携式应用程序不应该依赖于标准超时提示。根据使用的数据库和提供程序使用的锁定机制,可能会或可能不会提示提示。

javax.persistence.EntityManager.getReference

获取一个实例,其状态可能会被懒惰地取出。 如果数据库中不存在请求的实例,则在首次访问实例状态时将引发EntityNotFoundException。 (在调用getReference时,允许持久性提供者运行时抛出EntityNotFoundException。)除非在实体管理器打开时,实例就可以被应用访问,否则应用程序不应期望实例状态在分离时可用。

javax.persistence.EntityManager.flush()

将持久性上下文与基础数据库同步

javax.persistence.EntityManager.lock

使用指定的锁定模式类型锁定持久性上下文中包含的实体实例。

如果指定了悲观锁定模式类型且实体包含版本属性,则持久性提供程序还必须在获取数据库锁定时执行乐观版本检查。 如果这些检查失败,则抛出OptimisticLockException。

javax.persistence.EntityManager.refresh

从数据库刷新实例的状态,覆盖对实体所做的更改(如果有)。

javax.persistence.EntityManager.clear

清除持久性上下文,导致所有托管实体分离。 对未刷新到数据库的实体所做的更改将不会保留。javax.persistence.EntityManager.detach

从持久性上下文中删除给定实体,导致托管实体脱离。 对实体进行的未刷新更改(如果有)(包括删除实体)将不会同步到数据库。 先前引用分离实体的实体将继续引用它。