gpt4 book ai didi

java - SQL 查询到 Hibernate ORM 查询

转载 作者:行者123 更新时间:2023-12-02 06:11:55 25 4
gpt4 key购买 nike

我正在尝试将普通 SQL 语句转换为正确的 Hibernate ORM 语句。我已经阅读了很多相关内容,但仍然无法完全弄清楚。我希望你们中的一些人可以帮助我:)

以下是我认为与此任务相关的一些类(class):

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();

}

我的 DAO 实现中的 storeProduct() 方法:

   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/hibernate)尝试。

我认为我已经完成了一半,但仍然无法弄清楚完整的 hibernate 方法,这就是我希望你能帮助我的地方。

基本上我需要的只是将 storeProduct() 方法中的纯 sql 字符串转换为正确的 hibernate 命令。

非常感谢您能给我的任何帮助。

最诚挚的问候达扎

编辑:这是映射:

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

至于问题,恕我直言,它是在不完整的代码中。我非常确定我的 hibernate 命令仍然缺少某些内容和/或根本就是错误的。

这是我想要转换为 hibernate 的源 SQL 字符串:“UPDATE WAREHOUSE SET Product_count = "+ count + "WHERE Product_name = '"+ Product + "';"

最佳答案

您可以使用 Restrictions 类来获取结果。使用以下内容:

createCriteria.add(Restrictions.like("productName", product.getProductName()));

请注意,我在您的 Product 对象中使用了字段名称,而不是数据库中的列名称。您的方法也可以通过更改来工作

createCriteria.add( Property.forName( "product_name" ).like( product ) );

createCriteria.add( Property.forName( "product_name" ).like( product.getProductName() ) );

我注意到您正在将“product_name”与“product”进行匹配,“product”是整个对象,而不是您要匹配的字段。

关于java - SQL 查询到 Hibernate ORM 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21809735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com