我使用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添加的数据。我需要帮助。谢谢!