【问题标题】:Spring java.time.LocalDateTime binding issue [duplicate]Spring java.time.LocalDateTime 绑定问题[重复]
【发布时间】:2016-04-25 07:32:09
【问题描述】:

我有一个具有以下属性的域对象,在提交表单时,只有完成日期从表单输入绑定,而 dateRaised 为空。除了验证错误之外没有错误。我尝试将 dateRaised 类型更改为 java.time.LocalDate 并且它工作正常。是否已支持绑定到 java.time.LocalDateTime?

@NotNull
@Column(name = "date_raised", nullable = false)
@DateTimeFormat(iso = ISO.DATE_TIME)
private java.time.LocalDateTime dateRaised;

@Column(name = "completion_date")
@DateTimeFormat(iso = ISO.DATE)
private java.time.LocalDate completionDate;

【问题讨论】:

    标签: java spring spring-boot jsr310


    【解决方案1】:

    您需要实现AttributeConverter<EntityType, DatabaseType> 来转换您的日期。

    以下博客Thorben JanssenThoughts on Java 解释了如何将LocalDate 属性存储在DATE 列中或将LocalDateTime 存储在TIMESTAMP 列中。

    How to persist LocalDate and LocalDateTime with JPA

    JPA 2.1Java 8 之前发布,因此不支持新的日期和时间 API。如果您想使用新的类(以正确的方式),您需要自己定义转换为java.sql.Datejava.sql.Timestamp。这可以通过实现AttributeConverter<EntityType, DatabaseType> 接口并使用@Converter(autoApply=true) 注释类来轻松完成。通过设置autoApply=true,转换器将应用于EntityType的所有属性,并且不需要对实体进行任何更改。

    @Converter(autoApply = true)
    public class LocalDateAttributeConverter implements AttributeConverter<LocalDate, Date> {   
        @Override
        public Date convertToDatabaseColumn(LocalDate locDate) {
            return (locDate == null ? null : Date.valueOf(locDate));
        }
    
        @Override
        public LocalDate convertToEntityAttribute(Date sqlDate) {
            return (sqlDate == null ? null : sqlDate.toLocalDate());
        }
    }
    

    属性的转换对开发者透明LocalDate 属性可以用作任何其他实体属性。例如,您可以将其用作查询参数。

    LocalDate date = LocalDate.of(2015, 8, 11);
    TypedQuery<MyEntity> query = this.em.createQuery("SELECT e FROM MyEntity e WHERE date BETWEEN :start AND :end", MyEntity.class);
    query.setParameter("start", date.minusDays(2));
    query.setParameter("end", date.plusDays(7));
    MyEntity e = query.getSingleResult();
    

    【讨论】:

      猜你喜欢
      • 2020-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-26
      • 1970-01-01
      • 1970-01-01
      • 2018-11-18
      相关资源
      最近更新 更多