Интервал времени Joda не может быть проиндексирован через Hibernate - PullRequest
1 голос
/ 01 марта 2011

У меня есть таблица базы данных, в которой два столбца вместе указывают время начала и время окончания события.

Я использую Hibernate для доступа к базе данных, а также для получения и хранения данных.

Мой класс Hibernate для этой таблицы выглядит следующим образом.

public class EstateViewing implements Comparable<EstateViewing> {
    private Long id;
    private Estate estate;
    private Interval timeInterval;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "estate_viewing_generator")
    @SequenceGenerator(sequenceName = "estate_viewing_sequence", name = "estate_viewing_generator")
    public Long getId() {
        return id;
    }

    protected void setId(Long id) {
        this.id = id;
    }

    @ManyToOne
    public Estate getEstate() {
        return estate;
    }

    public void setEstate(Estate estate) {
        this.estate = estate;
    }

    @Columns(columns = { @Column(name = "timeIntervalStart"), @Column(name = "timeIntervalEnd") })
    @Type(type = "org.joda.time.contrib.hibernate.PersistentInterval")
    public Interval getTimeInterval() {
        return timeInterval;
    }

    public void setTimeInterval(Interval timeInterval) {
        this.timeInterval = timeInterval;
    }

    @Override
    public String toString() {
        return ToStringBuilder.reflectionToString(this);
    }

    @Override
    /*
     * Time not defined is conceptually thought of as an unlimited high value
     * -1 Time is earlier than other (lower value) 
     *  0 Time is equal 
     *  1 Time is later than other (higher value)
     */
    public int compareTo(EstateViewing otherViewing) {

        if (this.getTimeInterval() == null && otherViewing == null)
            return 1;

        // Not defined, so in the future at some point
        if (this.getTimeInterval() == null && (otherViewing != null && otherViewing.getTimeInterval() != null))
            return 1;

        if (this.getTimeInterval() != null && (otherViewing == null || otherViewing.getTimeInterval() == null))
            return -1;

        if (this.getTimeInterval() != null) {

            // Before
            if (this.getTimeInterval().getEnd().isBefore(otherViewing.getTimeInterval().getEnd())) {
                return -1;
            }

            if (this.getTimeInterval().getEnd().isAfter(otherViewing.getTimeInterval().getEnd())) {
                return 1;
            }
        }
        return 0;
    }

Но когда я даю солнечную энергию для индексации этого класса, она не индексирует временной интервал Joda.

Я прошу solr проиндексировать этот класс:

solrServer.addBean (estate);

Этот объект недвижимости содержит объекты List of EstateViewings, которые я упомянул выше.

Solr индексировать другие данные, хранящиеся в объекте Estate, кроме List of EstateViewings.

Мне было интересно, связано ли это с временным интервалом Joda, который я использую.

Может ли кто-нибудь помочь мне найти решение этой проблемы. Заранее спасибо за любую помощь

1 Ответ

1 голос
/ 01 марта 2011

Я не понимаю, почему Солр должен понимать типы Йодатиме.Я думаю, вам придется сопоставить его со стандартным типом (например, long тиков), прежде чем передать его Solr.

...