Persistence unit的打包问题

使用过JPA嘛?遇到过打包实体后,jar包内部的实体不会自动mapping嘛?或者这里可以解决你的问题。

Persistence Unit的概念:每个EntityManager负责将固定数量的一组类映射到数据库中,这组类就被称做persistence unit。Persistence unit是在persistence.xml中定义的。根据Java Persistence规范的要求,该部署描述文件是必需的。一个persistence.xml文件可以定义一个或多个persistence unit,它一般都会放置在META-INF目录中。

每个persistence unit只能关联一个数据源。

XML schema文件persistence.xml的根节点是<persistence>,它包含了一个或多个<persistence-unit>元素。每个<persistence-unit>元素有两个属性:name(必需)和transaction-type(可选)。<persistence-unit>的子元素是<description>(可选)、<provider>(可选)、<jta-data-source>(可选)、<non-jta-data-source>(可选)、<mapping-file>(可选)、<jar-file>(可选)、<class>(可选)、<properties>(可选)和<exclude-unlisted-classes>(可选)。

下面是一个persistence.xml文件的例子。

<persistence>

   <persistence-unit name="titan">

      <jta-data-source>java:/OracleDS</jta-data-source>

      <properties>

         <property name=" org.hibernate.hbm2ddl">update</property>

      </properties>

   </persistence-unit>

</persistence>

 

进入主题了,为什么实体打成的jar包会出问题呢?根据官方说法:正常来说JAR文件是可以自动扫描的,但是那只是在Java EE环境下是保证可以正常执行,但在Java SE应用程序中却无法做到。所以呢在JavaSE环境中我们要自己告诉它,那个jar包要被扫描。

我们通过<jar-file>元素 去描述jar包,例如:

<jar-file>../lib/customer.jar</jar-file>

需要注意的是描述jar文件的路径问题,<jar-file>元素的值不能使用绝对路径,只能是一个相对路径。我试过在Junit测试时,是以包含persistence.xml的META-INF文件夹同级的目录为基准路径,但是在tomcat环境中是以webApps下各个应用文件夹第一层的META-INF为基准路径。

 

你可能感兴趣的:(tomcat,Hibernate,xml,jpa,JUnit)