我真的需要帮助。
以下是代码段:
hSql=" select case
when min(start_day_plan) is not NULL then min(start_day_plan)
else to_date((min(insertDate)) - cast('1 month' as interval),'yyyy-MM-dd' )
end
from Project"
getHibernateTemplate().find(hSql);
但这会产生以下错误:
java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.CaseNode
\-[CASE] CaseNode: 'case'
+-[WHEN] SqlNode: 'when'
| +-[IS_NOT_NULL] UnaryLogicOperatorNode: 'is not null'
| | \-[AGGREGATE] AggregateNode: 'min'
| | \-[IDENT] IdentNode: 'start_day_plan' {originalText=start_day_plan}
| \-[AGGREGATE] AggregateNode: 'min'
| \-[IDENT] IdentNode: 'start_day_plan' {originalText=start_day_plan}
\-[ELSE] SqlNode: 'else'
\-[METHOD_CALL] MethodNode: '('
+-[METHOD_NAME] IdentNode: 'to_date' {originalText=to_date}
\-[EXPR_LIST] SqlNode: 'exprList'
+-[MINUS] BinaryArithmeticOperatorNode: '-' {dataType=org.hibernate.type.DoubleType@bb21ab}
| +-[AGGREGATE] AggregateNode: 'min'
| | \-[IDENT] IdentNode: 'insertDate' {originalText=insertDate}
| \-[METHOD_CALL] MethodNode: '('
| +-[METHOD_NAME] IdentNode: 'cast' {originalText=cast}
| \-[EXPR_LIST] SqlNode: 'exprList'
| +-[QUOTED_STRING] LiteralNode: ''1 month''
| \-[IDENT] IdentNode: 'interval' {originalText=interval}
\-[QUOTED_STRING] LiteralNode: ''yyyy-MM-dd''
对此的正确查询是什么?我只想从插入日期中减去1个月。
如果你能提供帮助,请这样做。谢谢:)
答案 0 :(得分:0)
我相信你忘记了要查询的表格。
select
case
when min(start_day_plan) is not NULL then min(start_day_plan)
else to_date((min(insertDate)) - cast('1 month' as interval),'yyyy-MM-dd' )
end
from MyTable
答案 1 :(得分:0)
我最近偶然发现了同样的问题。我的错误来自JPA期望实体类中查询 AND 中的相同字段名称。
@Entity
public class Foo {
private String field1;
...
}
在查询中field1
是预期的,而不是Field1
也不是FIELD1
等等......
答案 2 :(得分:0)
我遇到的问题和解决方案与Stephan相似。我们在getter上使用JPA注释,但是字段名称以大写字母开头(无论如何这不是一个好的做法)。
private Timestamp MyTime;
...
@Column(name = "MYTIME")
public Timestamp getMyTime() {
return MyTime;
}
我认为当Hibernate基于getter解析我的字段名称时,它正在寻找名为myTime
的字段,但只有MyTime
。当我使用正确的驼峰约定(myTime
)