java.lang.AbstractMethodError: org.joda.time.contrib.hibernate.PersistentDateTime.nullSafeGet
java.lang.AbstractMethodError: org.joda.time.contrib.hibernate.PersistentDateTime.nullSafeGet — Ошибка может возникать при работе с версией Hibernate 4+.
Пример кода, в котором может возникнуть ошибка:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
@Entity @Table(name = "contact_audit", schema = "", catalog = "javastudy") public class ContactAuditEntity implements Auditable<String, Integer>, Serializable { private DateTime createdDate; @Column(name = "created_date") @Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime") public DateTime getCreatedDate() { return createdDate; } public void setCreatedDate(DateTime createdDate) { this.createdDate = createdDate; } |
При реализации интерфейса Auditable, который необходим для аудита изменений с помощью Spring Data JPA, необходимо указывать тип для времени (например для времени создания createdDate).
Между версиями Hibernate 3 и 4+ произошли изменения, которые не позволяют использовать одни и те же настройки.
Настройки зависимостей в pom.xml:
Hibernate 4, 5+
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<!-- Joda-Time - API uses in Spring Data--> <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.7</version> </dependency> <!-- DATE TIME FOR HIBERNATE 4.0+, for Hibernate <4.0 use joda-time-hibernate version 1.3 --> <dependency> <groupId>org.jadira.usertype</groupId> <artifactId>usertype.jodatime</artifactId> <version>2.0.1</version> </dependency> |
А в сущности прописывать:
@Type(type=»org.jadira.usertype.dateandtime.joda.PersistentDateTime»)
Для Hibernate <4 pom.xml:
1 2 3 4 5 6 7 8 9 10 11 12 |
<!-- Joda-Time - API uses in Spring Data--> <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.7</version> </dependency> <!--Joda-Time integration with Hibernate. Save types of date and time --> <dependency> <groupId>joda-time</groupId> <artifactId>joda-time-hibernate</artifactId> <version>1.3</version> </dependency> |
Для сущности:
@Type(type=»org.joda.time.contrib.hibernate.PersistentDateTime»)
2