使用JPA时persistence.xml中的属性标记

时间:2016-07-14 09:55:07

标签: java hibernate jpa

我是JPA的新手,并使用Hibernate作为JPA提供程序。我开始知道我们需要META-INF/persistence.xml配置文件。

我成功创建了一个简单的Java程序,使用JPA在DB中保存数据。

当我查看persistence.xml文件以更好地理解它时,一切都很好,怀疑开始了。

以下示例:

<persistence-unit name="test-jpa" transaction-type="RESOURCE_LOCAL">
    <properties>
        <property name="hibernate.connection.driver_class" value="org.h2.Driver"/>
        <property name="hibernate.connection.url" value="jdbc:h2:tcp://localhost/~/test"/>
        <property name="hibernate.connection.username" value="sa" />
        <property name="hibernate.connection.password" value="" />
        <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
        <property name="hibernate.hbm2ddl.auto" value="create" />
        <property name="hibernate.show_sql" value="true" />
    </properties>
</persistence-unit>

以下是用于读取配置的Java代码:

EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("test-jpa");

以下是疑惑:

  1. 我们怎么知道Hibernate是JPA提供商?是通过查看文件中的属性标记来推断的吗?

  2. 在配置文件中,有许多<property>个标签,它们是预先定义的,可以出现在文件中(对于给定的JPA提供商)还是我们可以随机添加任何属性?谁读取了这些<property>标签?

1 个答案:

答案 0 :(得分:2)

JPA提供商会提供可以告诉您所有这些内容的文档。不属于你吗?我很惊讶。

  1. 您应该在持久性单元中有一个<provider>元素来定义要使用的提供程序,或者它将使用您运行的环境的默认值(在JavaSE中你需要在CLASSPATH中只有一个JPA提供者,在JavaEE中服务器会有自己的默认值。

  2. 它们是提供者特定的。任何带有javax.persistence前缀的属性都是JPA标准。发布的前4个版本中有javax.persistence个变体,您应该使用它们。