Я пытаюсь преобразовать мои простые инструкции SQL в соответствующие Hibernate ORM. Я много читал об этом, но до сих пор не могу понять это полностью. Я надеюсь, что некоторые из вас может помочь мне :)SQL Query to Hibernate ORM Query
Вот некоторые из моих классов, которые я думаю, что отношение к этой задаче:
WarehouseProduct (мой объект класса):
package exercise.java.basics.storage;
public class WarehouseProduct {
private int productID;
private String productName;
private int productCount;
public WarehouseProduct(final String productName, final int productCount) {
this.productName = productName;
this.productCount = productCount;
}
public WarehouseProduct() {
}
public int getProductID() {
return this.productID;
}
public void setProductID(final int productID) {
this.productID = productID;
}
public String getProductName() {
return this.productName;
}
public void setProductName(final String productName) {
this.productName = productName;
}
public int getProductCount() {
return this.productCount;
}
public void setProductCount(final int productCount) {
this.productCount = productCount;
}
}
мой DAO. Метод
package exercise.java.basics.storage;
import javax.transaction.Transactional;
import exercise.java.basics.storage.ProductEnum.Product;
@Transactional
public interface WarehouseDAO {
public void initializeWarehouse();
public void storeProducts(final Product product, final int count);
public void removeProducts(final Product product, final int count);
public void updateStock();
}
storeProduct() из моей реализации DAO:
public void storeProducts(final Product product, final int count) {
//Plain-SQL, works just fine
Session session = getSessionFactory().getCurrentSession();
SQLQuery storeProductQuery = session.createSQLQuery("UPDATE WAREHOUSE SET product_count = " + count //$NON-NLS-1$
+ " WHERE product_name = '" + product + "';"); //$NON-NLS-1$ //$NON-NLS-2$
storeProductQuery.executeUpdate();
//Hibernate attempt, doesn't work just yet
session.get("WarehouseProduct.class", "product_count"); //$NON-NLS-1$ //$NON-NLS-2$
Criteria createCriteria = session.createCriteria(WarehouseProduct.class); // Object.class = Entity
createCriteria.add(Property.forName("product_name").like(product));
createCriteria.list();
}
При тестировании я не использую оба (обычный SQL/спящий режим) пытается сразу конечно.
Я думаю, что я уже нахожусь на полпути, но все еще не мог понять полный спящий подход, и именно там я надеюсь, что вы можете мне помочь.
В основном все, что мне нужно, это преобразование простой строки sql в методе storeProduct() для правильных команд hibernate.
Буду признателен за любую помощь, которую вы можете мне дать.
наилучшими пожеланиями daZza
EDIT: Вот отображение:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="exercise.java.basics.storage.WarehouseProduct" table="WAREHOUSE">
<id name="productID" type="integer">
<column name="product_ID" not-null="true"/>
<generator class="identity" />
</id>
<property name="productName" type="string">
<column name="product_name" length="100"/>
</property>
<property name="productCount" type="integer">
<column name="product_count"/>
</property>
</class>
</hibernate-mapping>
Что касается проблемы, то в неполном кода IMHO. Я почти уверен, что мои команды спящего режима все еще отсутствуют и/или просто ошибаются.
Это исходная строка SQL, которую я хочу перевести в спящий режим: "UPDATE WAREHOUSE SET product_count =" + count + "WHERE product_name = '" + product + "';"
Не могли бы вы поделиться своим отображение Hibernate сущностей в XML, вероятно, потому что я не вижу JPA/Hibernate аннотации в классе сущностей. А также ошибка/проблема, которую вы сейчас имеете. –
Добавлен файл сопоставления в исходное сообщение. – daZza