我是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
我希望你能提供帮助。
感谢。
答案 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
。