Миграция из org.joda.time.Interval в Spring Boot - PullRequest
0 голосов
/ 19 февраля 2020

Я использовал org.joda.time.Interval для представления временного интервала с фиксированным временем начала и окончания (отличного от продолжительности, которая не зависит от заданных c раз) для обмена через REST и сохранения энергетических расписаний в приложении сервера Spring Boot (2.2.2.RELEASE).

Я пробовал разные способы сохранения поля org.joda.time.Interval объекта через JPA / Hibernate:

  • jadira (7.0.0. CR1) с аннотацией над определением поля (@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentInterval"))
  • jadira (7.0.0.CR1) со свойством spring.jpa.properties.jadira.usertype.autoRegisterUserTypes=true set

Однако я всегда получаю

@OneToOne or @ManyToOne on de.iwes.enavi.cim.schedule51.Schedule_MarketDocument.matching_Time_Period_timeInterval references an unknown entity: org.joda.time.Interval

Вопросы:

  1. Есть ли способ заставить спящий режим работать с org.joda.time.Interval?
  2. Какое предпочтительное решение для перехода с org.joda.time.Interval на java.time не имеет аналогичного интервала класса?

1 Ответ

0 голосов
/ 13 марта 2020

В итоге я написал собственный класс:

@Entity
public class FInterval {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private long id;

    @Column
    private long startMillis;

    @Column
    private long endMillis;

    public FInterval() {
    }

    public long getStartMillis() {
        return startMillis;
    }

    public void setStartMillis(long start) {
        this.startMillis = start;
    }

    public long getEndMillis() {
        return endMillis;
    }

    public void setEndMillis(long end) {
        this.endMillis = end;
    }

    public FInterval(Interval entity) {
            this.startMillis = entity.getStartMillis();
            this.endMillis = entity.getEndMillis();
        }

    public Interval getInterval() {
        return new Interval(this.startMillis,this.endMillis);
    }
}

и конвертер атрибутов:

@Converter(autoApply = true)
public class IntervalAttributeConverter implements AttributeConverter<Interval, FInterval> {

    @Override
    public FInterval convertToDatabaseColumn(Interval attribute) {
        return new FInterval(attribute);
    }

    @Override
    public Interval convertToEntityAttribute(FInterval dbData) {
        return dbData.getInterval();
    }
}
...