无法让JPA使用Hibernate

时间:2010-08-15 08:35:07

标签: java hibernate orm tomcat jpa

对于周末项目,我试图用Hibernate 3.5运行JPA 2。请注意,我没有收到任何编译错误或运行时异常(当我在Tomcat上部署战争时)。以下是我的代码 -

的persistence.xml

<persistence 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"
    version="2.0">
    <persistence-unit name="postage" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
            <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"></property>
            <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/postage"></property>
            <property name="hibernate.connection.username" value="postage"></property>
            <property name="hibernate.connection.password" value="postage"></property>
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"></property>
            <property name="hibernate.hbm2ddl.auto" value="create-drop"></property>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.ejb.cfgfile" value="/hibernate.cfg.xml"></property>
        </properties>
    </persistence-unit>
</persistence>

的hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="current_session_context_class">thread</property>
        <!-- mapping files -->
        <mapping class="net.rocky.postage.domain.Post"/>
        <mapping class="net.rocky.postage.domain.User"/>
    </session-factory>
</hibernate-configuration>

我有2个简单的实体类 -

@Entity
@Table(name="Post")
public class Post implements Serializable{

    @Id
    @GeneratedValue
    private long id;

    private String description;

    private String comments;

    @OneToOne
    private User postedBy;

并且

@Entity
@Table(name="PostageUser")
public class User implements Serializable{

    @Id
    @GeneratedValue
    private long id;

    private String username;

    private String password;

我在这里遗漏了什么。我整个星期六都在尝试所有组合。请帮帮我。

后续行动:不工作我的意思是 - 当我在Tomcat上部署应用程序时,我没有看到在Postgres中创建了2个表(因为我在hbm2ddl中给出了create-drop)。

后续行动2 :感谢您的回复。我甚至无法让Hibernate记录消息。这是我的配置:

log4j.appender.S=org.apache.log4j.ConsoleAppender
log4j.appender.S.layout=org.apache.log4j.PatternLayout
log4j.appender.S.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %c{1} [%p] %m%n
log4j.rootCategory=DEBUG, S

另外,在maven我添加了 -

         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-log4j12</artifactId>
             <version>1.6.1</version>
         </dependency>
         <dependency>
             <groupId>log4j</groupId>
             <artifactId>log4j</artifactId>
             <version>1.2.16</version>
         </dependency>

仍然没有来自hibernate的日志消息

2 个答案:

答案 0 :(得分:1)

我无法发现映射或配置中的任何明显错误(尽管在容器中运行时通常应该使用数据源,但您的配置可以正常工作)。但这里有一些建议或想法:

  • 告诉我们有关您应用的结构和包装的更多信息(persistence.xml在哪里?)。
  • 启用DEBUG日志记录:
    • 用于类别org.hibernate.tool.hbm2ddl
    • 甚至整个org.hibernate类别,直到你开始工作
  • 运行JUnit测试(out-container),它将使调试更容易。

后续行动:我没有在日志记录配置中看到任何针对Hibernate的记录器。您需要为类别org.hibernate.tool.hbm2ddl添加以下内容:

log4j.logger.org.hibernate.hbm2ddl=debug

我还想知道您的persistence.xml在Maven项目中的位置。

参考

答案 1 :(得分:1)

我终于有了这个工作..我将我的依赖项改为 -

     <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>3.3.2.GA</version>
    </dependency>       
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>3.3.2.GA</version>
    </dependency>       <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-annotations</artifactId>
        <version>3.3.1.GA</version>
    </dependency>
早些时候它是 -                      org.hibernate作为             休眠核心             3.5.x的         

请记住,3.5 doc说它在核心中合并了EM和Annotations,这就是我想要使用它的原因。


当我通过spring配置数据源时,它给了我找不到的类org.hibernate.ejb.HibernatePersistence(这是我的JPA提供者)

在进一步调查中,我发现JBoss maven repo(https://repository.jboss.org/nexus/content/groups/public)有hibernate 3.5 jars,但jar是错误的(比如大小为X MB)但是当你从网站下载hibernate二进制文件时它们的大小为Y MB。此外,这个jar的pom没有定义正确的依赖项(如果你直接从Hibernate站点下载捆绑的发行版,你会得到它)。

对我而言,这是一个有点破坏性的交易,我不得不切换回3.3以使其完美运行。

也许这会帮助某人,并且可能会修复Maven上的Hibernate 3.5。 Hibernate论坛也提出了这个问题。