我需要 JPA Hibernate 项目中的数据源吗?

Posted

技术标签:

【中文标题】我需要 JPA Hibernate 项目中的数据源吗?【英文标题】:Do I need DataSource in JPA Hibernate project? 【发布时间】:2011-12-30 20:21:46 【问题描述】:

我正在准备一些使用 JPA 2.0、Hibernate 作为提供程序、mysql 5 作为数据库的应用程序,它将部署在 JBoss AS 7.0.2 上。我已经在 persistence.xml 中配置了一些基础知识,我遇到了一些问题的麻烦。我注意到有些人还在 JBoss 管理控制台级别定义了一些特定的数据源。 我的问题是。我真的需要担心 Hibernate 应用程序中的一些 DataSource 或类似的东西吗?我认为这在旧的 JDBC 方法中很重要。在一些显示示例的书籍中,持久性中没有这样的配置。 xml 或 hibernate.cfg.xml 我是否必须将 mysql 连接器放入 JBOSS_HOME/standalone/deployments 目录才能在我的应用程序中使用 MySQL?这是我的 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="SomeApp">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/somedb" />
            <property name="hibernate.connection.username" value="" />
            <property name="hibernate.connection.password" value="" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
        </properties>
    </persistence-unit>
</persistence>

【问题讨论】:

【参考方案1】:

好吧,您可以通过以下方式访问数据库:

提供 url/驱动程序/密码/等。 persistence.xml 中的信息使用您的 jpa-provider 属性(在您的情况下为 hibernate.connection.*)或 JPA 2.0 标准化的 javax.persistence.jdbc.* 那些 - 这基本上看起来像您发布的示例,

在 ApplicationServer 中创建一个数据源并仅在 persistence.xml 中引用它(通过您在创建期间提供的 JNDI 名称),这可能看起来类似于此(为简洁起见,没有 XML 模式定义):

<persistence>
    <persistence-unit name="SomeApp">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>jdbc/myDB</jta-data-source>
    </persistence-unit>
</persistence>

您现在实际上正在做的事情(使用这些属性)是使用 JDBC。


我肯定会在 ApplicationServer 中创建数据源,而不是在 persistence.xml 的属性中提供它。它允许您动态更改最终数据库、它的类型、凭据、管理连接池等,甚至无需触及您的描述符。

这也更安全,因为凭据不会写入您服务器上留下的纯文件中。

附带说明,请记住 javax.persistence.jdbc.* 属性是 Java SE 环境的 JPA 提供程序必须要求,但它是可选的 strong> 用于 Java EE

希望有帮助!

【讨论】:

帮了大忙!现在我明白了其中的区别。 但我仍然感觉不到这个mysql连接器的想法。我是否必须在 JBoss 上部署它?我注意到在 JBoss 上部署 war 文件期间,我在许多其他文件之间获得了这样的信息:01:06:27,794 WARN [org.hibernate.engine.jdbc.internal.JdbcServicesImpl](MSC 服务线程 1-4)HHH00342:无法获取到查询元数据的连接:没有找到适合 jdbc:mysql://localhost:3306/ 的驱动程序...为什么即使我在 JBOSS 部署目录或 WEB-INF/lib 中也找不到驱动程序?跨度> @rivasket 看看DataSource Configuration In AS7。如果对你有任何帮助,请给我一个信号。 是的。这解决了我的数据库连接问题。非常感谢您,对这样的延误表示歉意。我最近有很多工作,没有太多时间在这方面工作。 @rivasket 如果您的问题得到解决,请随时接受其中一个答案;-)【参考方案2】:

我是否必须将 mysql 连接器放入 在我的 JBOSS_HOME/standalone/deployments 目录中使用 MySQL 申请?

是的,您需要将 Mysql J/connector 用作 JDBC 驱动程序。您的应用服务器(JBOss、Weblogic、Glassfish 等)不提供它,因为这取决于您使用的 RDBMS(在本例中为 Mysql)及其版本。

对于 JBoss 7,JDBC 驱动程序可以通过以下两种方式之一安装到容器中:作为部署或作为核心模块。对于两种模式的优缺点,您可以查看以下文档的详细说明:http://community.jboss.org/wiki/DataSourceConfigurationInAS7

【讨论】:

以上是关于我需要 JPA Hibernate 项目中的数据源吗?的主要内容,如果未能解决你的问题,请参考以下文章

hibernate/JPA 中的 @PreUpdate 和 @Prepersist(使用会话)

从 JPA/Hibernate 中的视图加载实体

JPA/Hibernate - 不需要的部分回滚和会话处理

Play 2.4 JPA/Hibernate EntityManager 不刷新到数据库

Apache Felix 中的 JPA / Hibernate 集成

JPA(Hibernate)