时间戳的休眠搜索查询返回空列表
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 中设置:UPDATEuser
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 子句搜索时间戳