PA规范的第9.1.17小节)。
问题:在JPA可以调用存储过程吗?
回答:JPA规范仅要求支持SELECT SQL语句(通过EntityManager.createNativeQuery()调用,或@NamedNativeQuery注解或named- native-query XML元素)。但是,我认为大多数实现也多少支持以相同方式调用存储过程。
问题:在EJB3中,更新实体bean的单个字段/列会导致更新该DB行中的所有字段/列,还是仅更新该DB行中更改的列?
回答:该行为取决于实现。OpenJPA将只更新被修改字段对应的列。但是,我们可能在某些位置添加update-all-columns选项。请参阅 OPENJPA-38。
问题:EJB3.0如何替换EJB2.0中的ejbLoad()、ejbStore()之类的回调方法?
回答:JPA规范提供了一些可以随意(单个)实现的 回调方法。
问题:EJB3.0如何替换EJB2.0 CMP和BMP?
回答:EJB3 JPA规范对EJB2 CMP提供了功能完善的替换。JPA规范没有解决bean管理的持久化,如果您希望实现自己的持久化,应该继续使用BMP,或者最好使用会话bean fa?ade进行自定义持久化。
问题:命名查询可以位于JPA实体以外吗?就像在会话bean或帮助类中那样?
回答:JPA实现仅扫描实体类(和映射超类以及嵌入类)来查找命名查询。我希望将来的JPA规范版本提供一种方式,用于将命名
查询限制到一个类对象中,到那个时候,就可以认为能够在任何位置定义命名查询。
可以在orm.xml文件中定义命名查询,然后使您的持久化单元指向该orm.
xml文件,JPA规范允许将任意数目的orm.xml文件合并到一起。
问题:JPQL支持多数据库查询吗?
回答:JPA规范并不要求实现必须只使用单个数据库(甚至实现必须使用关系数据库)。因此实现可以随意提供对多个数据库的访问。但是,据我所知,当前的JPA实现都没有这么作,除非是通过数据库方的工作来实现多数据库查询。
问题:在JPQL中,SELECT子句可以从多个实体中拉出数据吗?
回答:是的。JPQL语言允许查询聚合和
投影。因此以下语句是有效的JPQL语句:
select p.name, p.contactInfo.phoneNumber from Person p
select p.address.state, avg(p.salary) from Person p group by p.add