- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想按时间戳的时间部分进行过滤。我将 JPA2 与 hibernate 和 oracle 数据库结合使用。我必须编写一个 JPA 查询,它返回实体,其中“std”属性的 TIME 部分高于参数的 TIME 部分。我无法更改数据库端,也无法使用 native 查询。
例如,我想搜索标准时间大于 12:01 的所有实体。因此,我将此日期参数放入 JPA 查询中:2013-11-11T12:01:01,但没有任何反应,结果列表包含带有 std 参数 (11:00) 2013-12-13T11:00:00 的元素。
我的查询如下所示:
Query q = em.createQuery( "SELECT t FROM Foo t WHERE t.std >= :p_1 ");
q.setParameter("p_1", myDate, TemporalType.TIME);
我的日期是:2013-12-11T12:01:01(如果我使用 toString:Wed Dec 11 12:01:01 UTC 2013 )
在实体类中,std 属性如下所示:
private java.util.Date std;
@javax.persistence.Column(name = "STD", nullable = false, insertable = true, updatable = true)
@javax.persistence.Temporal(javax.persistence.TemporalType.TIMESTAMP)
public java.util.Date getStd()
{
return std;
}
public void setStd(java.util.Date value)
{
this.std = value;
}
我还尝试将entityClass中属性的注释更改为:
@javax.persistence.Temporal(javax.persistence.TemporalType.TIME)
public java.util.Date getStd()
{
return std;
}
但这并没有帮助。
在sql中,std属性是TIMESTAMP:
"STD" TIMESTAMP (6) NOT NULL ENABLE,
我必须将 JPA 查询与 hibernate 一起使用, native 查询不是一个选项。有人可以解释为什么它不起作用以及我该如何正确地做到这一点吗?
谢谢!
编辑:
例如,如果数据库中的标准值如下:
2013-12-08T10:00:00
2013-12-08T14:00:00
2013-12-11T10:00:00
2013-12-11T14:00:00
2013-12-14T10:00:00
2013-12-14T14:00:00
我在查询中输入了“2013-12-11T12:00:00”,我想取回所有实体,其中“std”具有更高的时间,无论从日期开始。在此示例中,这些:
2013-12-08T14:00:00
2013-12-11T14:00:00
2013-12-14T14:00:00
如果我检查 hibernate 调试日志,我可以看到 std 已映射到 org.hibernate.TimeType。
[org.hibernate.hql.internal.ast.tree.DotNode] (http-/127.0.0.1:8080-1) getDataType() : std -> org.hibernate.type.TimeType@f600d7a
[org.hibernate.hql.internal.ast.tree.FromReferenceNode] (http-/127.0.0.1:8080-1) Resolved : t.std -> foo0_.STD
[org.hibernate.hql.internal.ast.tree.FromReferenceNode] (http-/127.0.0.1:8080-1) Resolved : t -> foo0_.ID
最佳答案
您显然可以在 Hibernate/HQL 中使用(至少是一些)SQL 函数。这包括CAST
,并要求数据库做出适当的响应(即,TIME
类型存在并且可以从TIMESTAMP
进行转换)。 如果它有效,它可能会像这样工作:
Query q = em.createQuery( "SELECT t FROM Foo t WHERE CAST(t.std as TIME) >= :p_1 ");
(请注意,我没有支持数据库/Hibernate 实例来测试它。也可能取决于 Hibernate 的版本。)
请注意,这将忽略任何索引!这更多是因为您只查询部分数据,而不是 Hibernate 方面的某些缺陷
关于java - 过滤 TIMESTAMP 的 TIME 部分不起作用(JPA2、HIBERNATE),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20676308/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!