繁体   English   中英

休眠-java.time.LocalDate无法转换为java.util.Date

[英]Hibernate - java.time.LocalDate cannot be cast to java.util.Date

我正在使用Maven,Java和Hibernate创建一个简单的应用程序

我知道有两个重复的问题,但是我想知道的是为什么当我使用最新版本的org.hibernate.hibernate-core 5.3.4时会弹出此错误。

基于我已阅读的问题,我不必使用hibernate-java8依赖项,因为hibernate-core具有内置的Java 8支持,并且Maven中已弃用了hibernate-java8。

知道有什么问题吗? 这是一些片段

service.addPerson("Rob","Thomas",LocalDate.of(1985,5,5));

方法声明将是

public Integer addPerson(String firstName, String lastName, LocalDate birthdate){ 

  Session sesh = factory.openSession();
  Transaction trans = null;

try{ 
   tx = sesh.beginTransaction();
   person = new Person(firstName,lastName,birthdate);
   personID = (Integer) session.save(person);
   tx.commit();
} catch (...) {

}
finally{
  session.close(); 
 }

return personID;
}

您必须将LocalDate转换为Date。 在代码的第一部分中,我将LocalDate转换为Date并返回到LocalDate对象。 在第二部分中,我将LocalDateTime转换为Date并返回到LocalDateTime对象。

public class LocalDateToDate {
    public static void main(String[] args) {
        // Convert java.time.LocalDate to java.util.Date and back to
        // java.time.LocalDate
        LocalDate localDate = LocalDate.now();
        System.out.println("LocalDate = " + localDate);

        Date date1 = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
        System.out.println("Date      = " + date1);

        localDate = date1.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
        System.out.println("LocalDate = " + localDate);
        System.out.println();

        // Convert java.time.LocalDateTime to java.util.Date and back to
        // java.time.LocalDateTime
        LocalDateTime localDateTime = LocalDateTime.now();
        System.out.println("LocalDateTime = " + localDateTime);

        Date date2 = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
        System.out.println("Date          = " + date2);

        localDateTime = date2.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
        System.out.println("LocalDateTime = " + localDateTime);
    }
}

您可以将LocalDate转换为Date

Date current = LocalDate.from(Instant.ofEpochMilli(new java.util.Date().getTime())
                        .atZone(ZoneId.systemDefault()));

LocalDate ld = new java.sql.Date( new java.util.Date().getTime() ).toLocalDate();

如果你有 :

public class Person {
    private LocalDate birthdate;
}

您可以使用转换器,并在字段上使用@Convert(converter = LocalDateConverter.class)批注


@Converter(autoApply=true)
public class LocalDateConverter implements AttributeConverter<LocalDate, Date> {
    @Override
    public Date convertToDatabaseColumn(LocalDate d){
        return d !=null ? Date.valueOf(d) : null;
    }

    @Override
    public LocalDate convertToEntityAttribute(Date d){
        return d !=null ? d.toLocalDate() : null;
    }

}

您的构造函数调用new Person(firstName,lastName,birthdate)接受java.util.Date ,而不java.time.LocalDate 只需更改构造函数,然后更改Person类中的数据类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM