【发布时间】: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
userSETdatum= '1970-02-02 00:00:00' WHEREuser.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 上报告错误。
标签: java hibernate lucene hibernate-search hibernate-query