问题:EJB专家团队是如何摆脱事务描述符的?
回答:在会话bean和消息驱动bean中,可以通过描述符和注释来控制事务的行为。此外,我们将默认的事务属性更改为“REQUIRED”,这个默认值比以前的值“SUPPORTS”更
常用。因此,完全不必为业务方法配置事务行为。
JPA实体仅供本地使用,重点关注域模型。因此,无法在JPA实体上配置事务性(或远程边界或安全性)。而是必须使用会话bean fa?ade(或消息驱动bean),才可以通过EJB协议使用这些实体。通常来说,这是一件好事,配置安全性、远程处理和事务的粒度应该比持久化数据的粒度粗很多。JPA着重关注持久化数据,以及与EJB的其他部分和Java EE规范集成起来照管其他企业关注点。
问题:推荐对主键使用“long”还是“Long”?如果允许使用null作为值,将会如何?
回答:这实际上取决于您的数据模型。如果您的数据模型允许主键为null,那么使用Long,如果您的数据模型规定主键列不能为null,则使用 long更合适。总的来说,我认为对于非复合主键,允许null作为合法值容易产生混淆,因此我倾向于使用long,而不是Long。
问题:您说EJB 2.0不支持继承,但是可以在几个不同位置(远程/bean)使用继承,只是不在本地使用而已。请解释一下。
回答:根据EJB 2.1规范的附录D3:
当前的EJB规范未指定组件继承的概念。
另一方面,JPA规范确实规定了实体继承的概念。我们已经处理了EJB 2.1规范中指出的各种问题和复杂性,现在允许完全的多态查询和关联。
问题:BEA计划什么时候支持/发布EJB3?
WebLogic Server 10 Technology Preview 是完全符合规范的Java EE 5应用服务器。它包括完整的EJB3支持。WebLogic Server 10大概于三月下旬发布。
此外,Kodo 是完全符合规范的生产就绪JPA实现,并且已经发布。
问题:JPA是否支持组合主键?
回答:JPA支持自然ID和组合ID,以及数据库指派或实现指派的数字值。
问题:是否存在Spring模板,像JDBC模板一样可以在容器外部使用?
回答:是的,Spring 2有JPA模板。但是,Spring 2可以对任何标记着@Repository的bean执行JPA异常转译。因此,总的来说,对于新的应用程序,最好直接使用JPA API,而不是另一个模板层。对于使用模板和正在迁移到JPA的现有应用程序来说,使用模板方法比较合理。
此外,可以像在Java EE服务器中一样将JPA的持久化单元部署到Spring,Spring对JPA规范中指出的EntityManager注入和查找服从容器规则。
问题:JPA是否支持JDK1.4?
回答:JPA需要
Java 5或更新版本。
问题:使用范围查询时,它是否也会返回结果总数(例如,返
回538项结果中的1-10项)?
回答:不,要想获得总数,必须发出另外一个查询。通用模式是,在第一次执行
搜索时获得总数,然后通过页面浏览结果,将总数存储到方便的位置(会话状态、cookie等):
if (isFirstPage()) { // this is the first time we're executing this query Query q = em.createQuery("SELECT COUNT(p) FROM Product p WHERE ..."); long count = ((Long) q.getSingleResult()).longValue(); // store count somewhere stateful } Query q = em.createQuery("SELECT p FROM Product p WHERE ..."); q.setFirstResult(page * PAGE_SIZE); // page is stored somewhere stateful q.setMaxResults(PAGE_SIZE);
问题:具有JPA包装器的Hibernate是不是一种EJB3实现?
回答:JPA规范是完整的EJB3规范的子集,因此JPA实现本身不是完整的EJB3实现。我不了解RedHat的EJB3实现的情况如何。但,Hibernate是JPA实现。
问题:与Hibernate相比,JPA是不是更好?
回答:JPA是规范,而Hibernate是实现。因此,这是不同事物的比较。可以肯定,使用标准API比使用专有API有更多优势,但不存在真正的劣势。
问题:是不是不再需要