2017-02-11 13 views
0

Я хотел бы сохранить LocalDate в Hibernate как Date, но я не могу найти его даже в документации Hibernate. Я пробовал один раз, но он хранится как тип blob.Как сохранить LocalDate в Hibernate как тип даты

Вот моя сущность билетов:

<?xml version="1.0" encoding="UTF-8"?> 
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > 
     <hibernate-mapping package="com.clustertech.entity"> 

    <class name="Ticket" table="ticket"> 
    <id name="id" type="int" column="id"> 
     <generator class="native" /> 
    </id> 
    <property name="date" column="tb_date" type="date" length="35"/> 
    <property name="topic" column="tb_topic" type="string" length="35"/> 
    <property name="subject" column="tb_subject" type="string" length="35"/> 
    <property name="status" column="tb_status" type="string" length="35"/> 
    <property name="message" column="tb_message" type="string"  length="255"/> 

    <many-to-one name="person" column="person_id"/> 

     </class> 
    </hibernate-mapping> 

А вот мой класс сущностей:

public class Ticket implements Comparable<Ticket> { 

    private int id; 
    private LocalDate date; 
    private String topic; 
    private String Subject; 
    private String message; 
    private String status; 
    private Person person; 
} 

Он имеет методы получения и установки, как обычный класс POJO. Я видел на других сайтах один способ сделать это, но они используют анотации. Я хотел бы что-то подобное, но я не использую anotations только обычный класс POJO и файлы hbm.xml. Я уверен, что мне нужно создать другой класс, чтобы преобразовать LocalDate в Date, но я не знаю, как связать этот класс с моей сущностью.

ответ

1

Вы должны создать конвертер:

@Converter 
public class MyConverter implements AttributeConverter<LocalDate, Date> { 

    @Override 
    public Date convertToDatabaseColumn(LocalDate localDate) { 
     if(localDate == null){ 
      return null; 
     } 

     return Date.valueOf(localDate); 
    } 

    @Override 
    public LocalDate convertToEntityAttribute(Date date) { 
     if(date == null){ 
      return null; 
     } 

     return date.toLocalDate(); 
    } 
} 

Затем в файле hbm.xml вы добавляете вы преобразователю как тип этого свойства:

<property name="date" column="tb_date" type="date"/> 
<convert converter="com.mypkg.MyConverter" attribute-name="date"/> 
+0

Я попробовал, но у меня есть эта ошибка Не удалось определить тип для: com.clustertech.entity.TypeConverter, за таблицей: билет, для столбцов: [org.hibernate.mapping.Column (tb_date)]. Я не знаю, что произошло, я сделал именно то, что вы написали. Я что-то пропустил? Кажется, что Hibernate не смог найти класс конвертера, когда он начинался. – yfabio

+0

Попробуйте добавить конвертер