【问题标题】:Hibernate search spatial embedded index queryHibernate 搜索空间嵌入索引查询
【发布时间】:2014-11-12 20:34:21
【问题描述】:

我有两节课。用户和地址。

用户:

    @Indexed
    @Entity
    @Table(name = "USERS")
    public class USER {

        @DocumentId
        @Id
        @Column(name = "ID")
        @GeneratedValue(strategy = GenerationType.TABLE, generator = "userSeq")
        @TableGenerator(name = "userSeq", table = "SEQUENCES", pkColumnName = "SEQ_NAME", valueColumnName = "NEXT_VALUE", pkColumnValue = "USER_SEQ", initialValue = 1, allocationSize = 1)
        private Long id;

        @Field
        @Column(name = "NAME", length = 255)
        private String name;

        @IndexedEmbedded(depth = 1)
        @ManyToOne(cascade = CascadeType.DETACH, fetch = FetchType.EAGER)
        @JoinColumn(name = "ADDRESS_ID")
        private Address address;

}

地址:

@Indexed
@Entity
@Spatial
@Table(name = "ADDRESSES")
public class Address {

    @DocumentId
    @Id
    @Column(name = "ID")
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "addSeq")
    @TableGenerator(name = "addtSeq", table = "SEQUENCES", pkColumnName = "SEQ_NAME", valueColumnName = "NEXT_VALUE", pkColumnValue = "ADD_SEQ", initialValue = 1, allocationSize = 1)
    private Long id;

    @Field
    @Column(name = "NAME", length = 255)
    private String name;

    @Latitude
    @Column(name = "LAT")
    private Double latitude;

    @Longitude
    @Column(name = "LON")
    private Double longitude;

    @OneToMany(mappedBy = "address", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private Set<User> users;
}

我可以得到直接地址查询的结果如下:

  FullTextSession fullTextSession = Search.getFullTextSession(session);
            QueryBuilder builder = fullTextSession.getSearchFactory()
                    .buildQueryBuilder().forEntity(Address.class).get();

            org.apache.lucene.search.Query luceneQuery = builder.spatial()
                    .onDefaultCoordinates().within(radius, Unit.KM).ofLatitude(lat)
                    .andLongitude(lon).createQuery();


            Transaction tx = session.beginTransaction();

            org.hibernate.Query hibQuery = fullTextSession.createFullTextQuery(
                    luceneQuery, Address.class);
            hibQuery.list();

但是当我尝试使用 User.class 进行相同的查询时,它不会返回任何结果。嵌入索引后,我应该直接获取它还是需要更改任何内容?

【问题讨论】:

    标签: hibernate hibernate-search hibernate-spatial


    【解决方案1】:

    在User实体的address字段中添加@Spatial注解:

    @Spatial
    @IndexedEmbedded(depth = 1)
    @ManyToOne(cascade = CascadeType.DETACH, fetch = FetchType.EAGER)
    @JoinColumn(name = "ADDRESS_ID")
    private Address address;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-01
      • 2012-05-26
      • 1970-01-01
      • 2016-04-21
      相关资源
      最近更新 更多