1. 在JavaEE容器中使用JPA和不在JavaEE容器中使用JPA的区别
1):首先在JavaEE容器中使用JPA不必在自己的项目中再加入JPA实现的jar包了,因为在应用服务器中已经含有实现JPA标准的jar包了,所以您的项目不必加入了。而如果项目不是在JavaEE容器中跑的话(比如轻量级的Spring+JPA+Hibernate实现),就得自己加入JPA实现的jar包了。
2):第二个就是/META-INF/persistence.xml文件的书写,在JavaEE容器中运行的项目不必显示的写出JPA的实现者——provider,因为在使用应用服务器的过程中,服务器底层已经自己默认使用了某些框架实现了JPA标准。当然,一些特殊属性——property为了运行时环境的移植性,一般在开发阶段不会指定实现者的特殊属性。除非项目的需求已经决定了,应用服务器不会发生变动,想让JPA执行的更有效率,而且开发人员本身已经十分清楚该应用服务器底层的JPA实现框架,指定property属性也是可以的。
3):事务的类型,一般在JavaEE容器中执行事务类型为JTA,到写代码的时候再确定到底是CMT还是BMT。如果在其他容器,比如Spring管理的时候,通常会采用RESOURCE_LOCAL,将事务交给Spring这个本地的局部容器去管理事务。
以下是2种情况的persistence.xml文件内容
JavaEE容器实现JPA
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
<persistence-unit name="JavaEE4JbossPU" transaction-type="JTA"> <jta-data-source>java:/jbossdemo</jta-data-source> <class>jpa.vo.Person</class> </persistence-unit>
</persistence> |
非JavaEE容器实现JPA
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
<persistence-unit name="ApplicationNewWebPU" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <properties> <!--不用Spring的数据源连接池的时候打开以下代码--> <!-- <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" /> <property name="hibernate.connection.url" value="jdbc:mysql://127.0.0.1:3306/ejbjpa" /> <property name="hibernate.connection.username" value="root" /> <property name="hibernate.connection.password" value="root" /> -->
<!-- Hibernate 方言(只有Hibernate 才需要设置) --> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" /> <!-- Hibernate 显示调试 SQL --> <property name="hibernate.show_sql" value="true" /> <!-- Hibernate 缓存设置(默认可不设置) --> <!-- <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider" /> --> <!-- Hibernate 格式化sql --> <property name="hibernate.format_sql" value="true" /> <property name="hibernate.hbm2ddl.auto" value="update" /> </properties> </persistence-unit> </persistence> |