我正在攻读Spring Core认证,我发现一些与Spring中JPA使用相关的概念存在疑问。
阅读有关JPA EntityManager 界面的培训课程文档,并说它执行以下操作:
管理其中的工作单元和持久对象: PersistenceContext
生命周期通常绑定到事务处理(通常是容器管理)
那么在这种背景下,工作单元究竟是什么?
是否类似于持久性类,其中定义了 JPA提供程序(如 Hibernate ),并且它定义为< strong>交易类型(本地与JTA)?或者是什么?
所以我知道 EntityManager 界面在 OO模型和关系模型之间提供了一个bridje,使用以下方法代表一些常见的在DB上操作:
persist(Object o):**将实体添加到持久性上下文中:** SQL:insert into table ...
remove(Object o):**从持久化上下文中删除实体:** SQL:从表中删除...
find(Class entity,Object primaryKey):**按主键查找:** SQL:select * from table where id =?
查询createQuery(String jpqlString):创建JPQL查询
flush():强制更改要写入的实体状态 立即到数据库
etcetc
所以现在我对这个界面有一些了解。这只是一个接口,所以我需要它的具体实现才能工作。我认为我不必自己实现以前的方法,但是我必须使用像Hibernate这样的ORM来为我提供实现,所以我不需要做额外的工作。这是对的吗?
TNX
答案 0 :(得分:3)
工作单元是Martin Fowler描述的设计模式,“[维护]受业务事务影响的对象列表,并协调写入更改和并发问题的解决方案。 “[PoEAA]换句话说,它是我们希望一起对数据库进行的一系列操作。基本上,它是一个事务,尽管完成一个工作单元通常会跨越多个物理数据库事务(请参见第11.1.2节“长对话”)。所以我们真的在谈论一个更抽象的交易概念。术语&#34;商业交易&#34;也有时用来代替工作单位。
(最好引用现有文档而不是重新排列单词,我认为很清楚)
你对EntityManager
是正确的,它是每个JPA提供者实现的接口,以及规范的其余部分(JPA本身是接口的集合,没有实现就无法做任何事情)。再次,the documentation
EntityManager实例与持久性上下文相关联。持久化上下文是一组实体实例,其中对于任何持久性实体标识,存在唯一的实体实例。在持久性上下文中,管理实体实例及其生命周期。 EntityManager API用于创建和删除持久性实体实例,按主键查找实体以及查询实体。
可由给定EntityManager实例管理的实体集由持久性单元定义。持久性单元定义了由应用程序关联或分组的所有类的集合,并且必须在映射到单个数据库时将其共同定位。