快,因此使用存储过程可能比较合理。另一方面,数据库承担这么多负载将对该应用程序的用户产生负面影响,因此最好付出一定代价跨网络拉出这些数据,以便将该数据库用作严格的存储
系统,而不是计算引擎。或者,如果应用程序的其余部分主要使用JPA,则适用的话,可能希望使用JPQL的大批量更新功能来进行更新。
问题
:如果不先将数据加载到内存中,是否可以执行大批量更新?
回答:是的,可以通过JPQL执行大批量更新和大批量删除:
UPDATE Employee e SET e.salary = e.salary * 1.1 WHERE e.salary < 100000
问题:你们对Kodo JDO有什么规划?JPA是否会通过实现JDO的所有功能而将其取代?如果是的话,是否存在任何时间表?如果不是,你们会不会继续积极地开发JDO?
回答:BEA仍然完全忠于JDO。从规范的观点来看,我认为过一段时间之后,JPA将包含当前的JDO规范中越来越多的功能。但是,我不了解Sun对JDO和JPA之间的融合工作有什么规划。
问题:什么是持久化单元?
回答:持久化单元是类和配置设置的集合,可以根据该集合创建EntityManagerFactory。它在 persistence.xml 文件中作为一个条目出现。
问题:如何在WebLogic 9.2中测试JPA
回答:现在可以在WebLogic 9.2中使用OpenJPA或Kodo。该服务器不执行会话bean持久化单元注入,但是在10.0服务器中可以这么作,并且在9.2中,没有任何 Kodo控制台集成。但是除了引导注入问题之外,应该能够在WebLogic 9.2中成功地使用JPA,包括参与托管事务。
问题:JDBC连接对应于JPA中的什么概念?
回答:JPA EntityManager大致相当于JDBC连接,而JPA EntityManagerFactory从概念上类似于JDBC数据源。JPA EntityTransaction(仅在JTA / appserver上下文以外可用)相当于JDBC连接的事务控制API。
在OpenJPA中,EntityManager在其生命周期中可能使用多个不同的JDBC连接。请参阅 openjpa.ConnectionRetainMode 属性的
文档了解详细信息。
问题:关于fetch类型,如果默认是主动(eager)加载,则提供程序可能忽略惰性(lazy)加载指令。因此,即使将字段设置为惰性,也可能会加载不必要的数据。将来的规范会不会将其修改为必须与fecth类型一致?这会涉及到什么问题?
回答:通常,OpenJPA永远不会忽略用户配置的FetchMode。这是提示而不是规则,因为惰性加载实际上是调优过程中一项关注事项,永远都不应该对应用程序产生行为性的影响*。JPA规范力图避免要求使用任何明确的性能调优策略,因为不同的
网络拓扑结构、数据存储系统和应用程序行为需要不同的调优关注。
例如,OpenJPA允许在运行时 动态控制 fetch配置。这意味着,它可能静态地配置对象模型,使某些字段进行惰性加载,然后动态地将其中一个字段添加到当前的fetch计划。这将导致OpenJPA违反静态定义的惰性设置。
在当天结束时,如果实现对数据加载执行错误的操作,您应能够非常轻松地评估其他实现,通过威胁转移到另一个实现,以至少获得所需的功能。这是让大量供应商采用JPA规范的重大优势之
一。
*当然,如果您依靠惰性加载设置来防止加载某些数据,以免后来传输到不同的层(也就是为了数据安全性),那么惰性加载存在重要的行为性影响。在OpenJPA中,可以使用 fetch组 控制通过电缆发送数据图时确切地分离哪些数据。
问题:在运行时更改fetch模式容不容易?
回答:JPA规范没有为此提供任何工具。OpenJPA通过 fetch规划 接口提供了对fetch特征的详细控制。JPQL的“JOIN FETCH”结构也可以用于限制主动fetch提示。
问题:使用乐观锁定时,@Version注释仅支持int字段吗,它可以是datetime吗?
回答:根据JPA的要求,@Version可以对int、long、short、Integer、Short、Long和Timestamp类型的字段使用。(J