Hibernate View在app和Workbench中显示不同的结果

时间:2015-11-07 16:10:45

标签: java mysql hibernate view sql-view

我正在开发一个用hibernate连接到MySql数据库的Java应用程序。

我正在使用Pojos定义类并使用Session类连接到数据库。

问题是下一个观点:

CREATE OR REPLACE VIEW INVENTARIO AS
SELECT
    ID_ARTICULO,
    ID_ESTRUCTURA,
    ID_ESTRUCTURA_ORIGEN,
    SUM(STOCK)STOCK,
    STOCK_MIN,
    NECESITA_REPO
FROM
    HISTORICO_INVENTARIO        
    LEFT JOIN TIPOS_MOVIMIENTO
    ON HISTORICO_INVENTARIO.ID_TIPO_MOV = TIPOS_MOVIMIENTO.ID_TIPO_MOV
GROUP BY ID_ARTICULO , ID_ESTRUCTURA , ID_ESTRUCTURA_ORIGEN , STOCK_MIN , NECESITA_REPO;

在Java中,我以这种方式映射视图:

<hibernate-mapping>
<class name="Pojos.Inventario" table="INVENTARIO">                       

    <id name="id_articulo" type="string" column="ID_ARTICULO"/>            

    <property name="id_estructura" type="string" column="ID_ESTRUCTURA" />

    <property name="id_estructura_origen" type="string" column="ID_ESTRUCTURA_ORIGEN" />

    <property name="stock" type="float" column="STOCK" />

    <property name="stock_min" type="float" column="STOCK_MIN" />   

    <property name="necesita_repo" type="string" column="NECESITA_REPO" />


</class>

我要说字段“id_articulo”不是ID,但我要选择一个,因为。

如果我在MySql Workbench中执行此视图,我可以正确地得到结果。如果我在我的应用程序中执行相同的查询,我有不同的结果。

有谁知道为什么会发生这种情况?

提前致谢。

编辑: 我试图定义XML将SQL放在subselect标记中:

<class name="Pojos.Inventario">
    <subselect>
        SELECT
        ID_ARTICULO,
        ID_ESTRUCTURA,
        ID_ESTRUCTURA_ORIGEN,
        SUM(STOCK) STOCK,
        STOCK_MIN,
        NECESITA_REPO
        FROM
        HISTORICO_INVENTARIO        
        LEFT JOIN TIPOS_MOVIMIENTO
        ON HISTORICO_INVENTARIO.ID_TIPO_MOV = TIPOS_MOVIMIENTO.ID_TIPO_MOV
        GROUP BY ID_ARTICULO , ID_ESTRUCTURA , ID_ESTRUCTURA_ORIGEN , STOCK_MIN , NECESITA_REPO
    </subselect>
    <synchronize table="HISTORICO_INVENTARIO"/>
    <synchronize table="TIPOS_MOVIMIENTO"/>
    <id name="id_articulo" type="string" column="ID_ARTICULO"/>
    <property name="id_estructura" type="string" column="ID_ESTRUCTURA" />

    <property name="id_estructura_origen" type="string" column="ID_ESTRUCTURA_ORIGEN" />

    <property name="stock" type="float" column="STOCK" />

    <property name="stock_min" type="float" column="STOCK_MIN" />   

    <property name="necesita_repo" type="string" column="NECESITA_REPO" />
</class>

获取worong结果集

2 个答案:

答案 0 :(得分:0)

使你的hibernate show_sql参数为true。现在尝试在日志中捕获sql并尝试在sql工作台中运行它。

<property name="show_sql">true</property>

答案 1 :(得分:0)

完成它!

问题是由ID产生的。我添加了一个额外的字段,即新ID。现在我得到了正确的结果集