Hibernate 如何在JPA中正确使用LocalContainerEntityManagerFactoryBean

Hibernate 如何在JPA中正确使用LocalContainerEntityManagerFactoryBean,hibernate,jpa,datasource,jndi,jta,Hibernate,Jpa,Datasource,Jndi,Jta,我下载了一个使用Hibernate和JPA的示例应用程序,问题是持久化单元。似乎我可以使用或 从我的研究中,我发现如果我使用第一个,我还必须指定,第二个(我认为这是对的,但如果我错了,请纠正我) 我认为第一个意味着url、驱动程序、用户、pwd将在web应用程序中配置。第二个将通过容器中的JNDI查找源代码(如果我错了,请再次更正) 但我需要为该属性指定的值是我的绊脚石。 我看过jdbc:sampleDS,java:sampleDS。(这些也是jndi查找吗?还没有看到jndi:sampleDS

我下载了一个使用Hibernate和JPA的示例应用程序,问题是持久化单元。似乎我可以使用
从我的研究中,我发现如果我使用第一个,我还必须指定
,第二个
(我认为这是对的,但如果我错了,请纠正我)

我认为第一个意味着url、驱动程序、用户、pwd将在web应用程序中配置。第二个将通过容器中的JNDI查找源代码(如果我错了,请再次更正) 但我需要为该属性指定的值是我的绊脚石。 我看过jdbc:sampleDS,java:sampleDS。(这些也是jndi查找吗?还没有看到jndi:sampleDS)那么应该是jdbc:还是java:还是jndi:这些都是“jndi”呢


“样本”这个名字实际上指的是什么?换句话说,如果我使用resource_local,它是指一个bean名称(我使用的是spring,配置数据源信息的bean称为jpaDataSource),还是指应用服务器上某处的jndi资源,例如JBOSS,或者其他我不知道的东西?

如果您不需要全局事务(跨多个持久性单元的事务,即数据库)或JNDI定义的数据源,请使用本地资源,如果您需要全局事务,则必须使用JTA,而JTA又要求您使用JNDI数据源,因为它们位于可以处理全局事务的应用程序服务器中

JNDI数据源是在应用程序服务器中配置的——对于JBOSS,可以在configuration/standalone.xml中配置,也可以在deployments文件夹中使用*-ds.xml文件配置

java:sampleDS是一个JNDI名称,例如mssql-ds.xml文件:

<?xml version="1.0" encoding="UTF-8"?> 
<datasources>
  <datasource jndi-name="java:jboss/datasources/myDatabase" pool-name="myDatabase" enabled="true" jta="true" use-java-context="true" use-ccm="true">
    <connection-url>
        jdbc:sqlserver://localhost;databaseName=myDatabase
    </connection-url>
    <driver>
        sqljdbc
    </driver>
    <security>
        <user-name>
            myusername
        </user-name>
        <password>
            mypassword
        </password>
    </security>
  </datasource>
<datasources>

jdbc:sqlserver://localhost;databaseName=myDatabase
sqljdbc
我的用户名
我的密码

资源\u如果您不需要全局事务(跨多个持久性单元的事务,即数据库)或JNDI定义的数据源,请使用本地资源,如果您需要全局事务,则必须使用JTA,而JTA又要求您使用JNDI数据源,因为它们位于可以处理全局事务的应用程序服务器中

JNDI数据源是在应用程序服务器中配置的——对于JBOSS,可以在configuration/standalone.xml中配置,也可以在deployments文件夹中使用*-ds.xml文件配置

java:sampleDS是一个JNDI名称,例如mssql-ds.xml文件:

<?xml version="1.0" encoding="UTF-8"?> 
<datasources>
  <datasource jndi-name="java:jboss/datasources/myDatabase" pool-name="myDatabase" enabled="true" jta="true" use-java-context="true" use-ccm="true">
    <connection-url>
        jdbc:sqlserver://localhost;databaseName=myDatabase
    </connection-url>
    <driver>
        sqljdbc
    </driver>
    <security>
        <user-name>
            myusername
        </user-name>
        <password>
            mypassword
        </password>
    </security>
  </datasource>
<datasources>

jdbc:sqlserver://localhost;databaseName=myDatabase
sqljdbc
我的用户名
我的密码

没有冒犯,但这在许多层面上都是无法理解的。也许你可以专注于问一个特定的问题。玛达,你是对的,我的错,我粘贴的一些代码还没有呈现出来。我会编辑这篇文章。无意冒犯,但这在很多层面上都是无法理解的。也许你可以专注于问一个特定的问题。玛达,你是对的,我的错,我粘贴的一些代码还没有呈现出来。我会编辑这篇文章。