所有。在针对Oracle数据库执行本机SQL查询时,我有一种奇怪的情况。如果通过SQL客户端软件(在我的例子中,DbVisualizer)执行查询,我有一个结果集;如果我的应用程序(Java,基于Spring)执行它,结果是不同的。
select
c.id
, c.parentId
, c.name
, c.sequence
, c.isSuppressed
, c.isGotoCategory
, c.hasChildren
, c.startDate
, c.endDate
from (
select
category.category_id as id
, category.parent_category_id as parentId
, nvl(context.category_name, category.category_name) as name
, nvl(context.sequence_num, category.sequence) as sequence
, nvl(context.is_suppressed, 'N') as isSuppressed
, decode(category.syndicate_url, null, 'N', 'Y') as isGotoCategory
, decode(category.is_leaf, 1, 'N', 'Y') as hasChildren
, category.start_date as startDate
, category.end_date as endDate
from (
select
category.category_id
, category.parent_category_id
, category.category_name
, category.start_date
, category.end_date
, category.syndicate_url
, category.sequence
, connect_by_isleaf as is_leaf
, level as category_level
from
category
start with
category.category_id = (
select
category_id
from
category
where
parent_category_id is null
start with
category_id = 3485
connect by prior parent_category_id = category_id
)
connect by category.parent_category_id = prior category.category_id and level <= (4 + 1)
) category
inner join category_destination_channel channel on channel.category_id = category.category_id
and channel.publish_flag = 'Y'
and channel.destination_channel_id = 1
left join contextual_category context on context.category_id = category.category_id
and context.context_type = 'DESKTOP'
where
category.category_level <= 4
and category.start_date <= sysdate
and category.end_date >= sysdate
) c
where
c.isSuppressed <> 'Y'
上面的查询是有问题的查询。通过SQL客户端执行时,外部限制适用(c.isSuppressed <> 'Y'
)并过滤掉记录。当应用程序执行查询时,外部限制似乎根本不应用,我的结果集中有不应存在的记录。
之前有人遇到过这种问题吗?
我的应用程序是使用:Java 7,Spring 4.x,Oracle 11(带有OJDBC驱动程序版本11.2.0.3)构建的。应用程序服务器是JBOSS EAP 6.3,我的测试是用Jetty(maven-jetty-plugin 6.1.26)完成的。
我已经考虑了问题的一些可能原因 - 应用程序访问错误的数据库,使用@SqlResultSetMapping
时出现异常问题 - 但是通过一些测试排除了它们。不知道该怎么做了。
感谢任何帮助。提前谢谢。