Joda时间间隔不能通过Hibernate索引

时间:2011-03-01 03:59:26

标签: hibernate indexing jodatime solr

我有一个数据库表,它有两个列,分别指定事件的开始时间和结束时间。

我正在使用Hibernate访问数据库并检索和存储数据。

这个表的hibernate Model类看起来像这样。

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(房地产);

此房地产对象包含我上面提到的EstateViewings对象列表。

Solr索引存储在Estate对象中的其他数据,除了EstateViewings列表。

我想知道这是否是因为我使用的Joda时间间隔。

任何人都可以帮我找到这个问题的解决方案。提前帮助

1 个答案:

答案 0 :(得分:1)

我不明白为什么Solr必须理解Jodatime类型。我认为在将它送到Solr之前,你必须将它映射到标准类型(例如long刻度线。)