Closed wenhaonan closed 3 years ago
Fenix 中生成 分页和排序的 SQL,内部调用的也是 Spring Data JPA 的方法生成的,你这个是用的什么数据库呢,生成的确实有些奇怪。
数据库是oracle
这个是完整的fenix
<fenix id="findAccountsByComId">
SELECT
t.*
FROM
(
SELECT
fa.ACCOUNT_ID,
fa.ACCOUNT_CODE,
fa.ACCOUNT_NAME,
fa.ENABLED_FLAG
FROM
FD_ACCOUNT fa,
FD_ACCOUNT_SEGMENT fas
WHERE
fa.ACCOUNT_ID = fas.ACCOUNT_ID
<andEqual field="fas.COMPANY_ID" value="criteria.companyId" match="?criteria.?companyId != empty" />
ORDER BY
fa.ACCOUNT_CODE
) t
WHERE
t.ENABLED_FLAG = 'Y'
<andLike field="t.ACCOUNT_NAME" value="criteria.accountName" match="?criteria.?accountName != empty" />
<andLike field="t.ACCOUNT_CODE" value="criteria.accountCode" match="?criteria.?accountCode != empty" />
</fenix>
这个生成是调的 JPA 的方法,你先看看执行能否成功,以及使用原生的方式生成的是什么样的,我目前没有 oracle 的库,我后续有时间试试。
也遇到同样问题,能否处理下?
@dubai 或许你可以提供下配置和SQL,以及使用的数据库和驱动版本。:)
@dubai 或许你可以提供下配置和SQL,以及使用的数据库和驱动版本。:)
找到原因了,字段名和属性一样,如果不加as别名,也会生成这种奇怪的sql
@QueryFenix(nativeQuery=true)
Page
<fenix id="page4" resultType="com.welink.channel.modules.base.vo.VehicleVo">
SELECT id,
code,
plateNum,
useProperty,
person,
dealerCode,
dealerName,
branchCode,
useType,
startDate,
type
FROM (SELECT v.ID,
v.CODE AS code,
v.PLATE_NUM AS plateNum,
v.USE_PROPERTY AS useProperty,
v.PERSON AS person,
v.DEALER_CODE AS dealerCode,
d.NAME AS dealerName,
v.BRANCH_CODE AS branchCode,
v.USE_TYPE AS useType,
v.START_DATE AS startDate,
v.type AS type
FROM T_ORG_VEHICLE v
LEFT JOIN T_ORG_DEALER D ON D.IS_DELETED = 'F' AND D.CODE = v.DEALER_CODE
WHERE v.IS_DELETED = 'F'
)
</fenix>
目前先关闭这个 issue 了哈。
这个是最终生成的sql, 加粗倾斜的是sort的值 WHERE t.ENABLEDFLAG = 'Y', fa.accountId ASC_ ) WHERE ROWNUM <= ?
这个是fenix的xml