java - session.get() 无法解析字段、参数

标签 java spring hibernate spring-mvc

我对 Spring MVC 完全陌生,但仍在尝试理解它的方法和引用事物的方式。我正在关注一个视频教程类(class)。

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

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

希望能帮到你。

谢谢。

最佳答案

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

此外,您应该阅读the Javadoc对于该方法,它需要两个参数,一个 Class 对象(告诉它您正在获得什么类型的东西)和一个 ID。因此,您的调用应该是 session.get(Product.class, id),并且如果您使用 Hibernate 5,则不需要转换为 Product

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

关于java - session.get() 无法解析字段、参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40327733/

相关文章:

mysql - Hibernate 选择空对象

java - Hibernate 无法以自定义方言注册 MySQL 的 'LIMIT' 函数

java - 无法使用 get(index) 显示对象数组

java - java中字符串有空格时无法获取整个字符串

java.lang.IllegalStateException : Neither BindingResult nor plain target object for bean name 'login' available as request attribute

spring - 使用 hibernate 空间配置 Spring Boot

java - 错误消息 ORA-00933 : SQL command not properly ended

java - 是否可以停用 Spring Integration 对现有消息 channel 的检查?

Spring Security 4升级后java.lang.NoSuchMethodError org.springframework.web.servlet.tags.form.InputTag.setDisabled

oracle - Oracle 和 Hibernate 中的 generatedValue 不起作用