2014-01-15 97 views
6

我使用hibernate 4和joda时间和弹簧数据jpa。春天的数据提供了注解Joda时间和休眠4

@CreadedOn 
@LastModifiedOn 

我试图用这两个annotations.Below是我的POJO

@Entity 
@Table(name="restaurant") 
@Audited 
public class Restaurant { 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
private long id; 

private String restaurantName; 

@CreatedDate 
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime") 
// @Type(type = "org.jadira.usertype.dateandtime.threetenbp.PersistentDateTime") 
private DateTime createdOn; 

@LastModifiedDate 
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime") 
// @Type(type = "org.jadira.usertype.dateandtime.threetenbp.PersistentDateTime") 
private DateTime modifiedOn; 
} 

按规定user types jodatime指令的快照,我有我的注释与性能。但是@Type仍然没有luck.Everytime我使用@Type注释和部署它让我的服务器上的错误

SEVERE: Error listenerStart

完整的堆栈跟踪低于

Jan 15, 2014 11:40:00 AM org.apache.catalina.startup.HostConfig deployWAR 
INFO: Deploying web application archive G:\apache-tomcat-7.0.47\webapps\base-spr 
ing-data-jpa.war 
Jan 15, 2014 11:40:00 AM org.apache.catalina.loader.WebappClassLoader validateJa 
rFile 
INFO: validateJarFile(G:\apache-tomcat-7.0.47\webapps\base-spring-data-jpa\WEB-I 
NF\lib\javax.servlet-api-3.1.0.jar) - jar not loaded. See Servlet Spec 2.3, sect 
ion 9.7.2. Offending class: javax/servlet/Servlet.class 
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
SLF4J: Defaulting to no-operation (NOP) logger implementation 
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further detail 
s. 
Jan 15, 2014 11:40:05 AM org.hibernate.annotations.common.Version <clinit> 
INFO: HCANN000001: Hibernate Commons Annotations {4.0.2.Final} 
Jan 15, 2014 11:40:05 AM org.hibernate.Version logVersion 
INFO: HHH000412: Hibernate Core {4.2.7.Final} 
Jan 15, 2014 11:40:05 AM org.hibernate.cfg.Environment <clinit> 
INFO: HHH000206: hibernate.properties not found 
Jan 15, 2014 11:40:05 AM org.hibernate.cfg.Environment buildBytecodeProvider 
INFO: HHH000021: Bytecode provider name : javassist 
Jan 15, 2014 11:40:05 AM org.hibernate.ejb.Ejb3Configuration configure 
INFO: HHH000204: Processing PersistenceUnitInfo [ 
     name: default 
     ...] 
Jan 15, 2014 11:40:05 AM org.hibernate.service.jdbc.connections.internal.Connect 
ionProviderInitiator instantiateExplicitConnectionProvider 
INFO: HHH000130: Instantiating explicit connection provider: org.hibernate.ejb.c 
onnection.InjectedDataSourceConnectionProvider 
Jan 15, 2014 11:40:06 AM org.hibernate.dialect.Dialect <init> 
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect 
Jan 15, 2014 11:40:06 AM org.apache.catalina.core.StandardContext startInternal 
SEVERE: Error listenerStart 
Jan 15, 2014 11:40:06 AM org.apache.catalina.core.StandardContext startInternal 
SEVERE: Context [/base-spring-data-jpa] startup failed due to previous errors 
Jan 15, 2014 11:40:06 AM org.apache.catalina.loader.WebappClassLoader clearRefer 
encesJdbc 
SEVERE: The web application [/base-spring-data-jpa] registered the JDBC driver [ 
com.mysql.jdbc.Driver] but failed to unregister it when the web application was 
stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistere 
d. 
Jan 15, 2014 11:40:06 AM org.apache.catalina.loader.WebappClassLoader clearRefer 
encesThreads 
SEVERE: The web application [/base-spring-data-jpa] appears to have started a th 
read named [Abandoned connection cleanup thread] but has failed to stop it. This 
is very likely to create a memory leak. 
Jan 15, 2014 11:40:06 AM org.apache.catalina.startup.HostConfig deployDirectory 
INFO: Deploying web application directory G:\apache-tomcat-7.0.47\webapps\docs 
Jan 15, 2014 11:40:06 AM org.apache.catalina.startup.HostConfig deployDirectory 
INFO: Deploying web application directory G:\apache-tomcat-7.0.47\webapps\exampl 
es 
Jan 15, 2014 11:40:06 AM org.apache.catalina.startup.HostConfig deployDirectory 
INFO: Deploying web application directory G:\apache-tomcat-7.0.47\webapps\host-m 
anager 
Jan 15, 2014 11:40:07 AM org.apache.catalina.startup.HostConfig deployDirectory 
INFO: Deploying web application directory G:\apache-tomcat-7.0.47\webapps\manage 
r 
Jan 15, 2014 11:40:07 AM org.apache.catalina.startup.HostConfig deployDirectory 
INFO: Deploying web application directory G:\apache-tomcat-7.0.47\webapps\ROOT 
Jan 15, 2014 11:40:07 AM org.apache.coyote.AbstractProtocol start 
INFO: Starting ProtocolHandler ["http-nio-8080"] 
Jan 15, 2014 11:40:07 AM org.apache.coyote.AbstractProtocol start 
INFO: Starting ProtocolHandler ["ajp-apr-8009"] 
Jan 15, 2014 11:40:07 AM org.apache.catalina.startup.Catalina start 
INFO: Server startup in 6648 ms 

从昨天开始我试图让这两个工作,但无法做到so.Can谁能告诉我怎么解决这个problem.Below是我的POM依赖关系和资源库

<dependencies> 
<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>3.8.1</version> 
    <scope>test</scope> 
</dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-beans</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>3.2.5.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 

<dependency> 
    <groupId>javax.validation</groupId> 
    <artifactId>validation-api</artifactId> 
    <version>1.1.0.Final</version> 
</dependency> 
<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-validator</artifactId> 
    <version>5.0.1.Final</version> 
</dependency> 
<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-entitymanager</artifactId> 
    <version>4.2.7.Final</version> 
</dependency> 
<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-core</artifactId> 
    <version>4.2.7.Final</version> 
</dependency> 
<dependency> 
    <groupId>mysql</groupId> 
    <artifactId>mysql-connector-java</artifactId> 
    <version>5.1.27</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework.data</groupId> 
    <artifactId>spring-data-jpa</artifactId> 
    <version>1.5.0.BUILD-SNAPSHOT</version> 
</dependency> 
<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>javax.servlet-api</artifactId> 
    <version>3.1.0</version> 
</dependency> 
<dependency> 
    <groupId>jstl</groupId> 
    <artifactId>jstl</artifactId> 
    <version>1.2</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-webmvc</artifactId> 
    <version>${spring.version}</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-aspects</artifactId> 
    <version>3.2.5.RELEASE</version> 
</dependency> 
<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-envers</artifactId> 
    <version>4.2.7.Final</version> 
</dependency> 
<dependency> 
    <groupId>joda-time</groupId> 
    <artifactId>joda-time</artifactId> 
    <version>2.3</version> 
</dependency> 

<repository> 
     <id>spring-libs-snapshot</id> 
     <url>http://repo.spring.io/libs-snapshot</url> 
    </repository> 

</repositories> 
+0

可能重复的[坚持经由休眠约达时间的日期时间(http://stackoverflow.com/questions/6284098/persist-joda-times-datetime-via-hibernate) – naXa

+1

仅供参考,[Joda-Time](http://www.joda.org/joda-time/)项目现在处于[维护模式](https://en.wikipedia.org/wiki/Maintenance_mode),该团队建议迁移到[java.time](http://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html)类。请参见[Oracle教程](https://docs.oracle.com/javase/tutorial/datetime/TOC.html)。 –

+0

@BasilBourque:Thanx的更新:) – Deb

回答

18

你并不需要使用@Type注解。只需添加以下JPA属性:

entityManagerFactory.getJpaPropertyMap().put("jadira.usertype.autoRegisterUserTypes", "true"); 

而且我认为你已经错过了jadira dependecy:

<dependency> 
    <groupId>org.jadira.usertype</groupId> 
    <artifactId>usertype.core</artifactId> 
    <version>3.1.0.CR10</version> 
</dependency> 
+0

我不能感谢你够了。我希望我可以投票你回答不止一次。它像一个魅力 – Deb

+0

添加jadira依赖解决了它对我来说! –

2

如果使用gradle这个春季启动基于注解的配置,您可以使用@的Jakub-kubrynski意见通过

的build.gradle

dependencies { 
    compile 'org.jadira.usertype:usertype.core:3.2.0.GA' 
} 

application.properties

#Hibernate config 
spring.jpa.properties.jadira.usertype.autoRegisterUserTypes=true 
+0

使用Spring Boot 1.3.1和jadira 5.0.0.GA进行测试给了我'java.lang.NoSuchMethodError:org.hibernate.cfg.Configuration.registerTypeOverride(Lorg/hibernate/usertype/UserType; [Ljava/lang/String;) lorg/hibernate/cfg/Configuration;' –

+2

我现在找不到任何明确的内容,但我确信这是因为5.0.0.GA应该与Hibernate 5.x和4.0.0版本一起工作.GA与Hibernate 4.x. – Auke