【问题标题】:Hibernate View showing different results in app and Workbench休眠视图在应用程序和工作台中显示不同的结果
【发布时间】:2016-02-08 15:55:49
【问题描述】:

我正在开发一个通过 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 中执行这个视图,我可以正确地得到结果。如果我在我的应用程序中执行相同的查询,我会得到不同的结果。

有人知道为什么会这样吗?

提前致谢。

编辑: 我试图定义将 SQL 放在子选择标记中的 XML:

<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>

得到错误的结果集

【问题讨论】:

    标签: java mysql hibernate view sql-view


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      完成了!

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-07
        • 1970-01-01
        • 2018-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多