session.get()无法解析字段,参数

时间:2016-10-30 09:39:51

标签: java spring hibernate spring-mvc

我是Spring MVC的新手,但仍然试图了解它的方法及其引用方式。我正在关注一个视频教程。

我正在尝试通过类实现模型。

ProductDaoImpl.java

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public class ProductDaoImpl implements ProductDao {

    @Autowired
    private SessionFactory sessionFactory;

    @Override
    public void addProduct(Product product) {
        Session session = sessionFactory.getCurrentSession();
        session.saveOrUpdate(product);
        session.flush();
    }

    @Override
    public Product getProductById(String id) {
        Session session = sessionFactory.getCurrentSession();
        Product product = (Product) session.get(Product.class.productId);
                        // unable to resolve the productId on get()
        return product;
    }

    @Override
    public List<Product> getAllProducts() {
        return null;
    }

    @Override
    public void deleteProduct(String id) {

    }
}

ProductDao.java

import java.util.List;

public interface ProductDao {
    void addProduct(Product product);
    Product getProductById(String id);
    List<Product> getAllProducts();
    void deleteProduct(String id);
}

Product.java模型

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;


@Entity
public class Product {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)  //tells the system that when an instance is put to database, it will be numbered automatically starting from 1
    private String productName;
    private String productCategory;
    private String productDescription;
    private double productPrice;
    private String productDimension;
    private String productStatus;
    private int unitInStock;
    private String productManufacturer;
    private String productId;
}

但是,它无法解决

中的 productId 参数
@Override
        public Product getProductById(String id) {
            Session session = sessionFactory.getCurrentSession();
            Product product = (Product) session.get(Product.class.productId);
            return product;
        }

get()方法是否可以访问Product.class的字段? 是否要求Product.class.fieldHere?

中的字段

我不明白为什么它无法解决productId

我希望你能提供帮助。

感谢。

3 个答案:

答案 0 :(得分:1)

session.get(Product.class.productId);

这是无效的Java代码。 get()需要两个参数:实体类和要获取的实体的ID。 Java中的参数用逗号分隔。

session.get(Product.class, productId);

但你的变量甚至没有命名为productId。它被命名为id。所以代码应该是

session.get(Product.class, id);

这是初学Java的东西。我强烈建议你在使用Spring和Hibernate之前练习更简单的Java练习,这是很复杂的东西。

答案 1 :(得分:1)

session.get接受两个参数,一个是您实体的类,另一个是标识符

    Product product = (Product) session.get(Product.class,id);

答案 2 :(得分:1)

表达式Product.class.productId在Java中没有意义。 Product.class类文字,这意味着它是一个表示Product类的常量值,java.lang.Class的实例。 Class没有productId字段。

此外,您应该阅读the Javadoc方法 - 它需要两个参数,一个Class对象(告诉它你得到的是什么)和一个ID。因此,您的通话应为session.get(Product.class, id),如果您使用的是Hibernate 5,则无需转换为Product

然而,所有这些都没有实际意义 - 不是手动滚动一个针对Hibernate的DAO,而是使用JPA(它提供诸如通用API之类的优势,无需进行转换)和Spring Data(将自动生成整个数据)除了空接口声明之外,你只需要DAO。此外,您正在处理可能变得复杂的主题,在处理类似ORM之类的操作之前,您最好先学习一些练习来学习核心Java。