Исключение сопоставления с Hibernate 4.0, USERTYPE 3.0.0.CR4 и JODA Time 2.1

StackOverflow https://stackoverflow.com//questions/12658521

Вопрос

Я в настоящее время пытаюсь сохранить время Joda в Hibernate, используя usertype , но я продолжаю получать следующиеОшибка в Eclipse.

Сообщение об ошибке

(FAILE.ORG.HIBERNATE.mappeException: не удалось определить тип для: org.jadira.usertype.dateandtime.jsr310.persistentlocaldateTime, за таблицей: model_object, для столбцов: [org.hibernate.mapping.column (modified_date_time)])

Мой файл XML выглядит так, как этот

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="model" >
    <class name="ModelObject" table="MODEL_OBJECT">
        <id name="id" column="MODEL_ID" >
            <generator class="native"></generator>
    </id>
    <property name="modifiedDateTime"             
            type="org.jadira.usertype.dateandtime.jsr310.PersistentLocalDateTime"
            column="MODIFIED_DATE_TIME"/>
        <property name="creationDateTime"
            type="org.jadira.usertype.dateandtime.jsr310.PersistentLocalDateTime"
            column="CREATION_DATE_TIME"/>
    </class>
</hibernate-mapping>`
.

и мой файл java выглядит как это

package model;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import org.joda.time.LocalDateTime;

public abstract class ModelObject  {

private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);

private long id;
private LocalDateTime  modifiedDateTime = new LocalDateTime ();
private LocalDateTime  creationDateTime = new LocalDateTime ();

public Long getId(){
    return id;
}

public void setId(Long id){
    firePropertyChange("id", this.id, this.id = id);
}

public LocalDateTime  getModifiedDateTime(){
    return modifiedDateTime;
}

public void setModifiedDateTime(LocalDateTime  modifiedDateTime) {
    firePropertyChange("modifiedDateTime", 
                this.modifiedDateTime, 
                this.modifiedDateTime = modifiedDateTime);
}

public LocalDateTime  getCreationDateTime(){
    return creationDateTime;
}

public void setCreationDateTime(LocalDateTime  creationDateTime){
    firePropertyChange("creationDateTime", 
                this.creationDateTime, 
                this.creationDateTime = creationDateTime);
}

public void addPropertyChangeSupportListener(PropertyChangeListener listener){
    changeSupport.addPropertyChangeListener(listener);
}

public void removePropertyChangeListener(PropertyChangeListener listener){
    changeSupport.removePropertyChangeListener(listener);
}

public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener){
    changeSupport.addPropertyChangeListener(propertyName, listener);
}

public void removePropertyChangeListener(String propertyName, 
                                             PropertyChangeListener listener){
    changeSupport.addPropertyChangeListener(propertyName, listener);
}

protected void firePropertyChange(String propertyName, Object oldValue, Object newValue){
    changeSupport.firePropertyChange(propertyName, oldValue, newValue);
}

}
.

Я добавил usertype.spi-3.0.0.jar и usertype.core.3.0.0.Cr3.jar к пути моего класса.

Я понятия не имею, что происходит сюда, так что помощь будет очень ценится

Это было полезно?

Решение

Добавить отдельный файл с помощью HBM пользовательских типов

CustomTypes.hbm.xml

<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.softcomputer.softlab.business.core">
   <typedef name="localJodaDate"
      class="org.jadira.usertype.dateandtime.jsr310.PersistentLocalDateTime" />
</hibernate-mapping>  
.

Включить этот файл на ваше сопоставление

  <mapping resource="CustomTypes.hbm.xml" />
.

Другие советы

Проблема в том, что вы используете типы JSR 310 (для Threeten), а не типы времени Joda.

Смена org.jadira.usertype.dateAndtime.jsr310.persistentlocaldateTime reg org.jadira.usertype.dateandtime.joda.persistentlocaldateTa.persistentlocaldateTime и ваша проблема должна быть решена.

С уважением Крис

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top