JPA可以在没有hibernate提供程序的情况下运行。

时间:2012-09-25 13:44:00

标签: hibernate jpa

早期我使用JPA为我的应用程序开发了ORM。在peristenc.xml中,我定义了hibernate提供程序并使用了非JTA-DataSource。 JPA可以在没有hibernate提供程序的情况下运行。然后我省略了persistence.xml中的hibernate代码。然后我部署了,在控制台中我得到了以下信息。

 18:19:56,028 INFO  [org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator] (MSC service thread 1-6) HHH000130: Instantiating explicit connection provider: org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider
    18:19:56,032 INFO  [org.hibernate.dialect.Dialect] (MSC service thread 1-6) HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect
    18:19:56,033 INFO  [org.hibernate.engine.transaction.internal.TransactionFactoryInitiator] (MSC service thread 1-6) HHH000268: Transaction strategy: org.hibernate.engine.transaction.internal.jdbc.JdbcTransactionFactor

但我没有在我的应用程序中提到任何关于hibernate的地方。

** persistence.xml ** *

    <?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
    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_2_0.xsd">
    <persistence-unit name="StudentManagementSystem" transaction-type="RESOURCE_LOCAL">
        <non-jta-data-source>java:jboss/datasources/studentDS</non-jta-data-source>
        <class>com.dms.entity.student.StudentDetail</class>
        <class>com.dms.entity.student.MarkDetail</class>
        <class>com.dms.entity.student.PRDSemesterDetail</class>
        <class>com.dms.entity.admin.LoginDetail</class>
    </persistence-unit>
</persistence>

*非JTA-数据来源*

<datasource jndi-name="java:jboss/datasources/studentDS" pool-name="studentDS" enabled="true" use-java-context="true">
                    <connection-url>jdbc:mysql://localhost:3306/exercise</connection-url>
                    <driver>com.mysql</driver>
                    <security>
                        <user-name>student</user-name>
                        <password>student</password>
                    </security>
                </datasource>
<driver name="com.mysql" module="com.mysql">
                        <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlDataSource</xa-datasource-class>
                    </driver>

2 个答案:

答案 0 :(得分:2)

您正在JBoss中运行您的应用程序,而Hibernate是JBoss的默认持久性提供程序。如规范中所述,持久性提供程序在persistence.xml中是可选的。在这种情况下,容器(JBoss)使用其默认提供程序。

答案 1 :(得分:1)

是的,您可以指定要使用哪个JPA提供程序将其放在persistence.xml中:

<persistence-unit name="default" transaction-type="RESOURCE_LOCAL">
  <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
  ...
</persistence-unit>

该示例使用eclipse-link作为提供者。您必须在类路径中具有提供程序特定的jar才能使用(eclipse-link,openJPA,hibernate,iBatis等)

您获得的消息是因为您的服务器已经捆绑了一个hibernate实现,并且这是默认设置,但您应该能够通过设置正确的提供程序来使用您想要的实现。

但是,如果没有任何提供程序,您将无法运行JPA,因为JPA不是实现,而只是对持久性应该如何定义。