我是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");
以下是疑惑:
我们怎么知道Hibernate是JPA提供商?是通过查看文件中的属性标记来推断的吗?
在配置文件中,有许多<property>
个标签,它们是预先定义的,可以出现在文件中(对于给定的JPA提供商)还是我们可以随机添加任何属性?谁读取了这些<property>
标签?
答案 0 :(得分:2)
JPA
提供商会提供可以告诉您所有这些内容的文档。不属于你吗?我很惊讶。
您应该在持久性单元中有一个<provider>
元素来定义要使用的提供程序,或者它将使用您运行的环境的默认值(在JavaSE
中你需要在CLASSPATH中只有一个JPA
提供者,在JavaEE
中服务器会有自己的默认值。
它们是提供者特定的。任何带有javax.persistence
前缀的属性都是JPA
标准。发布的前4个版本中有javax.persistence
个变体,您应该使用它们。