时间戳的休眠搜索查询返回空列表

Posted

技术标签:

【中文标题】时间戳的休眠搜索查询返回空列表【英文标题】:Hibernate Search Query for timestamp returns empty list 【发布时间】:2019-02-12 08:34:32 【问题描述】:

我正在使用 Hibernate 开发 Spring Boot 项目,并且正在尝试将时间戳映射出 SQL 数据库。其他针对字符串或数字的查询工作正常,所以问题不应该是项目结构本身。

我的 User.java 类的片段:

@Indexed
@Entity

public class User 
  @Id
  @GeneratedValue(strategy=GenerationType.AUTO)
  private Integer id;

  @Field
  @Basic
  private java.sql.Timestamp datum;

  public java.sql.Timestamp getDatum() 
    return datum;
  

我的搜索服务片段:

FullTextEntityManager fullTextEntityManager =
    org.hibernate.search.jpa.Search.
    getFullTextEntityManager(entityManager);

QueryBuilder queryBuilder =
    fullTextEntityManager.getSearchFactory()
    .buildQueryBuilder().forEntity(User.class).get();

org.apache.lucene.search.Query query =
        queryBuilder.range().onField("datum")
          .below(java.sql.Timestamp.valueOf("1980-02-01 11:02:20.000")).createQuery();

org.hibernate.search.jpa.FullTextQuery jpaQuery =
    fullTextEntityManager.createFullTextQuery(query, User.class);

@SuppressWarnings("unchecked")
List<User> results = (List<User>) jpaQuery.getResultList();

return results;

【问题讨论】:

你有数据库记录的例子吗?我的猜测是您的时间戳格式不正确。 @cmoetzing 时间戳在 db 中设置:UPDATE user SET datum = '1970-02-02 00:00:00' WHERE user.id = 1;当我使用休眠搜索显示所有条目时显示的时间戳:["id":1,"datum":"1970-02-01T23:00:00.000+0000", 您是否尝试过简化您的问题?也许做一个简单的查询来准确查找您的日期。 getCurrentHibernateSession().createCriteria(User.class).add(Restrictions.eq("datum", Timestamp.valueOf("1970-02-02 00:00:00"))); 我从未使用过 lucene 查询,因此我不知道您的 range()below() 是否正确。 如果您刚刚在datum 属性上添加了此@Field 注释,请在尝试新查询之前检查您的reindexed your database。如果它仍然不起作用,则可能是一个错误。您可以尝试使用Hibernate Search test case templates 构建一个重现器,如果您设法重现该问题,您可以在JIRA 上报告错误。 【参考方案1】:

你可以不使用 SpringJPA 吗?

所以它只是一个界面

@Repository
public interface YourModelRepository extends JpaRepository<YourModel, Integer>
        List<YourModel> findByDatumGreaterThan(LocalDatetime datum);

让 JPA 的接口处理它。

这是spring jpa reference sheet。

【讨论】:

干杯。很高兴我能帮上忙。 :)

以上是关于时间戳的休眠搜索查询返回空列表的主要内容,如果未能解决你的问题,请参考以下文章

R RODBC sqlQuery 和 WHERE 子句搜索时间戳

使用 Lucene 进行带时间戳的地理空间搜索

在 DB2 中获取没有时间戳的日期

SQL查询以获取具有不同时间戳的多行

pyspark 的“between”功能:时间戳的范围搜索不包含在内

查询以列表形式返回一年中每个月的天数?