今天我发现了一个非常奇怪的JVM 行为,一个(通常是类型安全的)List<Date>确实List<MyObject>在运行时保持了!
我想知道怎么会发生,但在网络上找不到任何东西.
情况就是这样:我正在和Spring Data JPA 1.2.0一个人JBoss EAP 6.0 Server一起工作JRE 1.6.0_18-b07.
错误地,在Spring Data JPA Repository类中,@Query表达式中写入了错误的结果类型.应该是:
@Query("select distinct trunc(record.orderDateTime) from MyType record [...]" )
public List<Date> getOrderDates(...);
Run Code Online (Sandbox Code Playgroud)
但是:
@Query("select record from MyType record [...]" )
public List<Date> getOrderDates(...);
Run Code Online (Sandbox Code Playgroud)
因此,目的是加载一个日期(java.util.Date)列表,如果在第一个代码片段中正确定义了查询,该列表工作正常.
但是编码错误导致了以下结果:在运行时,实际上List<MyType>返回了WAS ,即使方法的签名定义了一个List<Date>.同样在我的模型List<Date>中,a/的属性包含a List<MyType>.我调试了它,无法相信我的眼睛!我甚至可以写这个列表的JSP的内容(我只认识到了这个怪异的行为,因为JSP不能显示任何更由于春季表达式语言错误与试图从类型匹配存在的MyType对Date,这当然有坠毁).
天哪,我现在应该放弃对Java类型安全性的信任吗?
有没有人遇到过这样的问题?
是否存在对此的解释?
我可以做任何事情来解决这个问题,还是一般问题?也许是另一个版本的JRE,JBOSS,......?