2017-02-11 18 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; 
} 

它有getter和setter作为一个正常的POJO类。我在其他网站上看到了这样做的一种方式,但他们正在使用偏移。我想要类似的东西,但我不使用普通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,在表:ticket,列:[org.hibernate.mapping.Column(tb_date)]。我不知道发生了什么,我完全是你写的。我想念什么?看起来Hibernate在启动时找不到我的转换器类。 – yfabio

+0

尝试添加

相关问题