从java.time.MonthDay映射到java.sql。*

时间:2016-08-18 17:56:05

标签: java sql datetime java-8 java-time

我们有一个案例,我们只需要日期和月份,因此会使用java.time.MonthDayJavadocs)来表示该信息。

我们知道我们可以为持久性创建我们自己的JPA对象,或者只使用java.sql.Date对象,但这通常需要一个不需要的年份信息。 另一种方法是在方法上调用方法.atYear(int)Javadoc)(虚拟年份)并收到java.time.LocalDateJavadoc),可以轻松转换为{ {1}}。但这很容易在将来产生误解(并且还会保留年度信息)。

对于这种情况,是否有一些"优雅" /假设的解决方案?或者是SQL的替代品,它支持持久性的全新日期和时间API。

另一个案例是java.sql.DateJavadoc)。

感谢阅读!

2 个答案:

答案 0 :(得分:2)

由于SQL数据库没有与MonthDay兼容的类型,请使用VARCHAR列,只需使用toString()MonthDay.parse()

如果您不喜欢--12-03格式,请使用自定义DateTimeFormatter

默认格式将正确排序为字符串。

答案 1 :(得分:1)

下面是代码段:

//列定义:

@Column(name = "date", columnDefinition = "mediumint", nullable = false)
@Convert(converter = MonthDayIntegerAttributeConverter.class)
protected MonthDay date;

//转换器定义:

public class MonthDayIntegerAttributeConverter implements AttributeConverter<MonthDay, Integer> {

    @Override
    public Integer convertToDatabaseColumn(MonthDay attribute) {
        return (attribute.getMonthValue() * 100) + attribute.getDayOfMonth();
    }

    @Override
    public MonthDay convertToEntityAttribute(Integer dbData) {
        int month = dbData / 100;
        int day = dbData % 100;
        return MonthDay.of(month, day);
    }
}