0

我将此代码写在 IReport 的一个变量中

 $F{wbsWbkRef.wbkStdRef.stdBlRtntp.blCode} != null ?
 ReportUtil.getFirstEntity($P{JPA_ENTITY_MANAGER},
 "SELECT "+
 "CASE WHEN std.stdBlRtntp.blCode IN ('UNIVGRANT' ,   'BEHYAR','TEACHER','GRANTED','EXTGRANTED','EXTGRANTED') THEN "+
"DECODE (std.stdBlAcctp.blCode , 'UNIVGRANT' ,'داخل','BEHYAR','داخل','TEACHER','داخل','GRANTED','داخل','EXTGRANTED','خارج','EXTGRANTED','ترددي','غير بورس')      "+
"END AS SCHOLARSHIPTITLE "+
"FROM Student std "+
"WHERE std.stdId=:stdId ",
"stdId="+  $F{wbsWbkRef.wbkStdRef.stdId},
"stdId=java.math.BigDecimal")
: null

但我得到这个错误

Caused by: java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.CaseNode
 \-[CASE] CaseNode: 'CASE'
    \-[WHEN] SqlNode: 'WHEN'
       +-[IN] InLogicOperatorNode: 'in'
       |  +-[DOT] DotNode: 'blookup1_.BL_CODE' {propertyName=blCode,dereferenceType=4,propertyPath=blCode,path=std.stdBlRtntp.blCode,tableA
p1_,className=com.ito.lms.persistence.BLookup,classAlias=null}
       |  |  +-[DOT] DotNode: 'student0_.STD_BL_RTNTP' {propertyName=stdBlRtntp,dereferenceType=1,propertyPath=stdBlRtntp,path=std.stdBlRtn
as=blookup1_,className=com.ito.lms.persistence.BLookup,classAlias=null}
       |  |  |  +-[ALIAS_REF] IdentNode: 'student0_.STD_ID' {alias=std, className=com.ito.lms.persistence.Student, tableAlias=student0_}
       |  |  |  \-[IDENT] IdentNode: 'stdBlRtntp' {originalText=stdBlRtntp}
       |  |  \-[IDENT] IdentNode: 'blCode' {originalText=blCode}
       |  \-[IN_LIST] SqlNode: 'inList'
       |     +-[QUOTED_STRING] LiteralNode: ''UNIVGRANT''
       |     +-[QUOTED_STRING] LiteralNode: ''BEHYAR''
       |     +-[QUOTED_STRING] LiteralNode: ''TEACHER''
       |     +-[QUOTED_STRING] LiteralNode: ''GRANTED''
       |     +-[QUOTED_STRING] LiteralNode: ''EXTGRANTED''
       |     \-[QUOTED_STRING] LiteralNode: ''EXTGRANTED''
       \-[METHOD_CALL] MethodNode: '('
          +-[METHOD_NAME] IdentNode: 'DECODE' {originalText=DECODE}
          \-[EXPR_LIST] SqlNode: 'exprList'
             +-[DOT] DotNode: 'blookup2_.BL_CODE' {propertyName=blCode,dereferenceType=4,propertyPath=blCode,path=std.stdBlAcctp.blCode,tab
okup2_,className=com.ito.lms.persistence.BLookup,classAlias=null}
             |  +-[DOT] DotNode: 'student0_.STD_BL_ACCTP' {propertyName=stdBlAcctp,dereferenceType=1,propertyPath=stdBlAcctp,path=std.stdBl
Alias=blookup2_,className=com.ito.lms.persistence.BLookup,classAlias=null}
             |  |  +-[ALIAS_REF] IdentNode: 'student0_.STD_ID' {alias=std, className=com.ito.lms.persistence.Student, tableAlias=student0_}
             |  |  \-[IDENT] IdentNode: 'stdBlAcctp' {originalText=stdBlAcctp}
             |  \-[IDENT] IdentNode: 'blCode' {originalText=blCode}
             +-[QUOTED_STRING] LiteralNode: ''UNIVGRANT''
             +-[QUOTED_STRING] LiteralNode: ''\u62f\u627\u62e\u644''
             +-[QUOTED_STRING] LiteralNode: ''BEHYAR''
             +-[QUOTED_STRING] LiteralNode: ''\u62f\u627\u62e\u644''
             +-[QUOTED_STRING] LiteralNode: ''TEACHER''
             +-[QUOTED_STRING] LiteralNode: ''\u62f\u627\u62e\u644''
             +-[QUOTED_STRING] LiteralNode: ''GRANTED''
             +-[QUOTED_STRING] LiteralNode: ''\u62f\u627\u62e\u644''
             +-[QUOTED_STRING] LiteralNode: ''EXTGRANTED''
             +-[QUOTED_STRING] LiteralNode: ''\u62e\u627\u631\u62c''
             +-[QUOTED_STRING] LiteralNode: ''EXTGRANTED''
             +-[QUOTED_STRING] LiteralNode: ''\u62a\u631\u62f\u62f\u64a''
             \-[QUOTED_STRING] LiteralNode: ''\u63a\u64a\u631 \u628\u648\u631\u633''
4

1 回答 1

0

Java 代码本身没有问题,但它也不是一个好习惯。问题是 Hibernate 正在接收的实体名称、该实体的类路径或实体到表的映射。

首先检查这个参数的值,$P{JPA_ENTITY_MANAGER}

下次,我建议将业务+逻辑放在后端,并将报告作为 Presentation 处理,只需发送准备好的参数即可。这将对您以后维护或修改报告有很大帮助。

于 2009-11-14T16:02:51.700 回答