Query q = getManager().createQuery("select o.id, CURRENT_TIMESTAMP from OutboundMessage o where o.id=11370");
Timestamp current_timestamp = (Timestamp)((Object[])q.getResultList().get(0))[1];
result = {Timestamp@13972} "2016-03-31 14:48:12.432215"
cdate = {Gregorian$Date@13975} "2016-03-31T14:48:12.000+0200"
zoneinfo = {ZoneInfo@12683} "sun.util.calendar.ZoneInfo[id="Europe/Vienna",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=139,lastRule=java.util.SimpleTimeZone[id=Europe/Vienna,offset=3600000,dstSavings=3600000,useDaylight=true,...]"
rawOffset = 3600000
rawOffsetDiff = 0
dstSavings = 3600000
ID = "Europe/Vienna"
zoneOffset = 7200000
daylightSaving = 3600000
forceStandardTime = false
locale = null
一个简单的新日期()
给出(7分钟后):
result = {Date@13983} "Thu Mar 31 16:55:07 CEST 2016"
cdate = {Gregorian$Date@13986} "2016-03-31T16:55:07.871+0200"
zoneinfo = {ZoneInfo@12683} "sun.util.calendar.ZoneInfo[id="Europe/Vienna",offset=3600000,dstSavings=3600 000,useDaylight=true,..."
zoneOffset = 7200000
daylightSaving = 3600000
forceStandardTime = false
locale = null
我获得的启用hibernate日志记录的相应本机查询也会产生正确的时间
select outboundme0_.OM_ID as col_0_0_, CURRENT_TIMESTAMP as col_1_0_ from MAILABO_OTS_TEST.TB_OUTBOUND_MESSAGE outboundme0_ where outboundme0_.OM_ID=11370
产量col_1_0_=2016-03-31 16:59:16.910065欧洲/柏林
在调试时,我只选择了current_timestamp
并将其强制转换为java.sql.timestamp
,以找出实体未被选中的原因,然后意识到current_timestamp
值关闭了2小时。
我希望行为是:jqpl->转换为本机查询->在db上执行的本机查询->结果转换回java类。假设这种行为,我的应用程序的整个java端甚至不应该知道CURRENT_TIMESTAMP所包含的实际值--它应该只关心将jpql转换为本机sql,并将resultset转换回java对象。
解决办法
我现在所做的是用一个命名参数替换current_timestamp
queryString="...where o.someDate < :referenceTime"
Query query = entityManager.createQuery(queryString);
query.setParameter("referenceTime", new Date());
你的问题有点混乱。首先看一下java.sql.timestamp上的Javadoc:
注意:此类型是java.util.Date和单独的nanosseconds值的组合。只有整数秒存储在java.util.Date组件中。小数秒--纳米--是分开的。当传递一个不是java.sql.Timestamp实例的对象时,timestamp.equals(Object)方法永远不会返回true,因为date的nanos组件是未知的。因此,timestamp.equals(Object)方法与java.util.date.equals(Object)方法不对称。此外,hashCode方法使用底层java.util.Date实现,因此在其计算中不包括nanos。
由于上面提到的Timestamp类和java.util.Date类之间的差异,建议代码不要将时间戳值作为java.util.Date的实例一般地查看。Timestamp和java.util.Date之间的继承关系实际上表示实现继承,而不是类型继承。
如果我运行这个,我会得到一个预期的结果:
Tuple t = em.createQuery("select u.id, CURRENT_TIMESTAMP from User u where u.id = 1", Tuple.class).getSingleResult();
for ( TupleElement<?> e: t.getElements()) {
System.out.println("Element = "+e.getAlias()+":"+t.get(e));
}
我不明白你描述的问题。这给出了与上面相同的时间。
System.out.println( (Timestamp)t.get(1) );
我不知道您所说的是什么意思,但是我在Java中运行此代码时只获得0次点击。
我有一个Kafka消费者,我从它消费数据从一个特定的主题,我看到下面的例外。我使用的是Kafka版本。 我添加了这两个额外的消费者属性,但仍然没有帮助: 那个错误意味着什么?我该如何解决它?我需要添加一些其他消费者属性吗?
问题内容: 是否可以跳过X个第一行,并在一个查询中选择所有其他行?像那样: 它将选择:pqr,stu,vwx,yz 我尝试使用LIMIT和OFFSET完成此操作,但是问题是表是动态的,而且我不知道应该输入哪个LIMIT(我不知道表中有多少行)。 问题答案: 如果只需要最后N行,请尝试以下操作: 这会根据的顺序为您提供最后几条记录。 您可以使用自动递增的主键(希望有一个主键)来确定行的顺序(如果无法
我目前正在从具有特定偏移量的主题中获取消息。我正在使用寻求()来实现它。但是当我将enable.auto.commit设置为true或使用手动同步(委托同步()/委托同步())时,Seek()不起作用,因为它没有轮询来自特定偏移量的消息,而是从最后提交的偏移量中选择。 因此,在使用Seek()时,是否必须将偏移量存储在外部DB中,而不提交给Kafka?Seek和Commit不能并行工作吗? 客户端
有人能解释一下这里出了什么问题吗。我猜这是有偏移和步幅的东西,但是... 顶点包含位置结构和2个浮点,颜色结构和4个GLubyte和Tex结构和2个浮点。 如果我用这段代码替换它,它工作得很好。
我使用的是“亚洲/曼谷”区域id。该偏移是从格林尼治时间UTC 07:00开始的。 但是当我做了下面的事情时,设置为“01/01/1900 7:00:00.000”时不是7:00 结果就是 周一一月一日07:00:00 ICT 1900 -402 周一一月一日06:00:00 ICT 1900 -420 我想知道偏移量是否在1900年1月1日早上7点左右发生了变化,所以我在维基百科上查了一下。ht
一切都清楚一次是UTC中的日期: