JPA: 无法找到事务管理器

5

我在一个JSF 2项目中使用JPA 2,因此我在GlassFish v3中配置了我的数据源,一切都很好,但是如果我尝试在Hibernate工具中测试JPA查询,它会给我以下错误:

Sessionfactory error:Could not locate TransactionManager

这是我的 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="SuaParte" transaction-type="JTA">
        <jta-data-source>jdbc/suaparte_ds</jta-data-source>
        <class>entity.Area</class>
        <properties>
            <property name="eclipselink.logging.level" value="FINE"/>
            <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
        </properties>


    </persistence-unit>
</persistence>

我在我的Eclipse JSF 2项目中使用了EclipseLink 2.3(Indigo)和JPA 2。 编辑 按照@fonini的方法,我的hibernate.properties:
hibernate.connection.username=<filled>
hibernate.connection.password=<filled>
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.connection.url=<filled>
hibernate.connection.provider_class=org.hibernate.connection.DriverManagerConnectionProvider
hibernate.datasource=jdbc/suaparte_ds
hibernate.transaction.manager_lookup_class=org.hibernate.transaction.JBossTransactionManagerLookup

但现在出现了另一个错误: error 我是否需要更改实体中的“id生成器”?
    @Entity
    @Table(name="product")
    public class Product implements Serializable {
        private static final long serialVersionUID = 1L;

        @Id
        @GeneratedValue(strategy=GenerationType.SEQUENCE)
        private Integer id;

        @Size(max=150, message="150 caracteres no máximo")
        private String description;

        // getters and setter
}

如果您将项目部署到Glassfish服务器上,它能正常工作吗? - fonini
它确实可以@fonini,我只是想测试JPQL查询,并发现Hibernate工具可以做到这一点。 - Valter Silva
MySQL没有序列,它使用自增来工作。您必须将GenerationType.SEQUENCE更改为GenerationType.IDENTITY。 - fonini
我从未将Hibernate Tools与JPA结合使用(Java EE的Eclipse内置Dali插件已经足够),因此我无法从经验上告诉你,但是我想知道如果您在使用EclipseLink实现JPA而不是Hibernate的JPA实现时,它是否真的可以正常工作。 如果完全不能一起使用,我也不会感到惊讶。 - BalusC
@fonini,我按照您的建议进行了更改,但仍然报原始错误。 - Valter Silva
@BalusC,我该如何安装(或者有解释链接)这个Dali插件?我认为它已经在Eclipse Java EE Indigo版本中了,但是我以前从未使用过这个版本,所以不知道如何找到它。 - Valter Silva
1个回答

0

由于 Hibernate Tools 在 Eclipse 中运行,因此无法访问特定于应用程序服务器的数据源。

您可以使用属性文件设置连接,以覆盖数据源。

以下是一个示例文件:

hibernate.connection.username=user
hibernate.connection.password=pass
hibernate.connection.driver_class=org.PostgreSQL.Driver
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
hibernate.connection.url=jdbc:postgresql...

hibernate.connection.provider_class=org.hibernate.connection.DriverManagerConnectionProvider
hibernate.datasource=
hibernate.transaction.manager_lookup_class=

如果在MySQL中,如何保持不变?我正在使用MySQL,之前没有提到,抱歉 =) - Valter Silva
1
方言:org.hibernate.dialect.MySQLDialect。如果您使用InnoDB,则使用(org.hibernate.dialect.MySQLInnoDBDialect),如果您使用MyISAM,则使用(org.hibernate.dialect.MySQLMyISAMDialect)。驱动程序类:com.mysql.jdbc.Driver。 URL:jdbc:mysql://localhost/your_db。希望这可以帮助! - fonini

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接