SQL客户端和应用程序

时间:2015-08-27 18:32:48

标签: oracle spring-4 jpa-2.1

所有。在针对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时出现异常问题 - 但是通过一些测试排除了它们。不知道该怎么做了。

感谢任何帮助。提前谢谢。

0 个答案:

没有答案