对于周末项目,我试图用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的日志消息
答案 0 :(得分:1)
我无法发现映射或配置中的任何明显错误(尽管在容器中运行时通常应该使用数据源,但您的配置可以正常工作)。但这里有一些建议或想法:
persistence.xml
在哪里?)。org.hibernate.tool.hbm2ddl
org.hibernate
类别,直到你开始工作 后续行动:我没有在日志记录配置中看到任何针对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论坛也提出了这个问题。