为什么Hibernate看不到新创建的数据?

时间:2016-10-19 17:13:48

标签: java spring hibernate

我使用Spring和Hibernate创建一个简单的Web应用程序,它与在线购物有关。使用hibernate插入新数据时,我的程序运行良好。当我检查数据库时,数据就在那里。问题是,当我获取我创建的新数据时,它什么都没得到。我试图手动将数据放入数据库,hibernate获取数据。对不起,如果这似乎是一个初学者的问题,我将Hibernate作为jr web开发人员培训的一部分进行学习。首先,我想告诉你配置:

<bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost/------" />
    <property name="username" value="----" />
    <property name="password" value="------" />
</bean>

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">

    <property name="dataSource">
        <ref bean="dataSource" />
    </property>

    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
        </props>
    </property>

    <property name="packagesToScan" value="com.qbryx.domain" />
</bean>

以下是添加新产品的代码:

@Override
public void addProduct(Product product) {

    Session session = sessionFactory.openSession();

    Transaction transaction = null;

    try {
        transaction = session.beginTransaction();
        Query query = session.createSQLQuery(DAOQuery.HQL_ADD_PRODUCT).setParameter("upc", product.getUpc())
                             .setParameter("category", product.getCategory().getCategoryId())
                             .setParameter("name", product.getName()).setParameter("description", product.getDescription())
                             .setParameter("price", product.getPrice());

        query.executeUpdate();

        transaction.commit();
    } catch (HibernateException e) {
        if (transaction != null)
            transaction.rollback();

        e.printStackTrace();
    } finally {

        session.close();
    }
}

@Override
public void addProductStock(InventoryProduct inventoryProduct) {

    Session session = sessionFactory.openSession();

    Transaction transaction = null;

    try {
        transaction = session.beginTransaction();

        Query query = session.createSQLQuery(DAOQuery.HQL_ADD_PRODUCT_STOCK)
                             .setParameter("upc", inventoryProduct.getUpc())
                             .setParameter("stock", inventoryProduct.getStock());

        query.executeUpdate();

        transaction.commit();
    } catch (HibernateException e) {

        e.printStackTrace();
    } finally {

        session.close();
    }

}

此代码可以将新产品与库存一起添加。这是我获取产品的代码:

@Override
public InventoryProduct getInventoryProductByUpc(String upc) {

    InventoryProduct product = null;

    Session session = sessionFactory.openSession();

    Transaction transaction = null;

    try {
        transaction = session.beginTransaction();

        Query query = session.createQuery(DAOQuery.HQL_GET_INVENTORY_PRODUCT)
                             .setParameter("upc", upc);

        product = (InventoryProduct) query.getSingleResult();

        transaction.commit();
    } catch (HibernateException e) {
        if (transaction != null)
            transaction.rollback();

        e.printStackTrace();
    } finally {
        session.close();
    }

    return product;
}

我不明白为什么Hibernate可以获取手动添加到数据库的数据,但不能获取通过Hibernate添加的数据。我需要帮助。谢谢!

0 个答案:

没有答案