有带有配置列和发布列的数据表。 这两个表都保留时间戳。 我的目标是使用CriteriaQuery在下面创建等效的SQL查询。
SQL查询: selecttimestampdiff(second,setup,released ) ) as sum_duration FROM
calls
entitymanager entitymanager=em provider.get (;
criteriabuildercriteriabuilder=entitymanager.getcriteriabuilder (;
criteriaqueryquery=criteria builder.create query (;
rootthingyroot=query.from (thingy.class );
路径设置=root.get (setup );
路径release=root.get (release );
expressionsecondliteral=criteria builder.literal (' second ' );
expression func=criteria builder.function (' timestamp diff ',Integer.class,secondLiteral,setup,release );
entity manager.create query (query ).getResultList );
但是,在尝试运行此代码时,发生了异常。 字符似乎显示为参数,而不是常量。
ava.lang.illegalstateexception 3360 nodatatypefornode : org.hibernate.hql.internal.ast.tree.method node
-[METHOD_CALL] MethodNode: ' (
- [ method _ name ] ident node : ' timestamp diff ' { original text=timestamp diff }
-[ expr _ list ] SQL node : ' expr list '
- [ named _ param ] parameter node : '? {name=param0,expectedType=null}
- [ dot ] dot node : ' CD r0 _.setup ' { property name=setup,dereferenceType=ALL,propertyPath=setup,path=genered
|-[ alias _ ref ] ident node : ' CD r0 _.id ' { alias=generated alias 0,className=com.vtsl.domain.CDR,table
|- [ ident ] ident node : ' setup ' { original text=setup }
-[ dot ] dot node : ' CD r0 _.release ' { property name=release,dereferenceType=ALL,propertyPath=release,pare
- [ alias _ ref ] ident node : ' CD r0 _.id ' { alias=generated alias 0,className=com.vtsl.domain.CDR,tablealias
-[ ident ] ident node : ' release ' { original text=release }
所以我匿名重写了LiteralExpression#render,试图直接返回我为这种方法提供的字符串,但这种异常。
ava.lang.illegalstateexception 3360 nodatatypefornode : org.hibernate.hql.internal.ast.tree.method node
-[METHOD_CALL] MethodNode: ' (
- [ method _ name ] ident node : ' timestamp diff ' { original text=timestamp diff }
-[ expr _ list ] SQL node : ' expr list '
- [ ident ] ident node : ' second ' { original text=second }
- [ dot ] dot node : ' CD r0 _.setup ' { property name=setup,dereferenceType=ALL,propertyPath=setup,path=genered
|-[ alias _ ref ] ident node : ' CD r0 _.id ' { alias=generated alias 0,className=com.vtsl.domain.CDR,table
|- [ ident ] ident node : ' setup ' { original text=setup }
-[ dot ] dot node : ' CD r0 _.release ' { property name=release,dereferenceType=ALL,propertyPath=release,pare
- [ alias _ ref ] ident node : ' CD r0 _.id ' { alias=generated alias 0,className=com.vtsl.domain.CDR,tablealias
-[ ident ] ident node : ' release ' { original text=release }
所以问题是,该如何解决我要执行的操作,或者实现第一个目标?
我在使用Hibernate。 我的数据库是MySQL。