Hibernate 5 отображает java. sql .Date в AttributeConverter на SQL TIMESTAMP вместо SQL DATE - PullRequest
0 голосов
/ 27 марта 2020

У меня есть объектный компонент, подобный этому:

@Column
public org.joda.time.LocalDate getAsOfDate() {
    return this.asOfDate;
}

Чтобы отобразить это на SQL, я написал JPA AttributeConverter:

import org.joda.time.LocalDate;

import javax.persistence.AttributeConverter;
import javax.persistence.Converter;
import java.sql.Date;

@Converter(autoApply = true)
public class JodaLocalDateConverter implements AttributeConverter<LocalDate, Date> {

    @Override
    public Date convertToDatabaseColumn(LocalDate attribute) {
        return DBUtils.localDateToDate(attribute);
    }

    @Override
    public LocalDate convertToEntityAttribute(Date dbData) {
        return DBUtils.dateToLocalDate(dbData);
    }
}

Когда я добавляю это в конфигурации Hibernate, DDL выглядит так:

    asOfDate timestamp,

, но я ожидал бы

    asOfDate date,

Я отладил Hibernate, и источником проблемы является то, что карты Hibernate все три SQL временных типа java.util.Date (см. https://github.com/hibernate/hibernate-orm/blob/5.4.13/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/JdbcDateTypeDescriptor.java#L38 и https://github.com/hibernate/hibernate-orm/blob/5.4.13/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/JdbcTimeTypeDescriptor.java#L39).

Когда org.hibernate.mapping.SimpleValue.buildAttributeConverterTypeAdapter() создает JpaAttributeConverter, поле relationalJavaTypeDescriptor будет использовать один из типов выше. Когда фактический тип JDB C SQL определяется с использованием org.hibernate.type.descriptor.sql.JdbcTypeJavaClassMappings, тогда тип отображения Java будет java.util.Date.

В Hibernate 4 это работало, но связанные строки не изменилось за 10 лет.

Как вернуть старое (правильное) сопоставление?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...