5. Hibernate注意事项
-
HQL(JPA QL)不支持KingbaseES特有的函数,包括:TO_HEX、UNICODE、SETSEED、STRPOS、GET_BIT、GET_BYTE、SET_BIT、SET_BYTE、EMPTY_BLOB、EMPTY_CLOB、CAST、ARRAY_NDIMS、ARRAY_FILL、UNNEST和ARRAY_LENGTH等。
-
HQL(JPA QL)不支持某些操作符,包括:+、^、%、&、|、||、#和~等,以及UNION、UNION ALL、INTERSECT、EXCEPT。
-
不支持INTERVAL数据类型以及返回值为INTERVAL的系统函数,包括:AGE、DATE_FORMAT、ISFINITE、STR_VALID和TIMEOFDAY。
-
对于近义的系统函数,只支持常用的名称,例如:sqrt(dsqrt)、cbrt(dcbrt)等。
-
对于重载的系统函数,只支持常用的参数及返回值类型,例如:LEFT(expr1 TEXT, expr2 INTEGER)、REPLICATE(expr1 TEXT, expr2 INTEGER)、RIGHT(expr1 TEXT, expr2 INTEGER)和SUBSTRING(expr1 TEXT, [FROM] expr2 INTEGER[,[FOR] expr3 INTEGER])等。
-
使用原生查询时,某些函数的返回值与KingbaseES有差异,例如:SIGN()应返回整型值但实际返回浮点型。
-
只有在查询时才可使用Query.getSingleResult() 方法,例如因为该方法会添加Limit子句,call function() 执行函数取返回值时使用该方法会构造一个不合法的SQL语句。
-
3.0.3和4两个版本的方言包中还包含一个名称为KingbaseBooleanDialect的方言包,对应的AcbaseT的方言包名称为AcbaseTBooleanDialect。该方言包用于hibernate使用Java的boolean类型映射数据库的numeric类型且使用hibernate默认的BooleanType时,hibernate执行操作可以将hql中boolean类型的true或者false转换成1或者0。 如:HQL语句
select p.name FROM Person p where p.sex=true
会转换为SQL语句select person0_.name as col_0_0_ from person person0_ where person0_.sex=1
。