java - 组织.hibernate.PropertyAccessException : could not get a field value by reflection getter of

标签 java hibernate

我环顾四周寻找答案,看起来它与反射有关,但由于我没有处理过它们,所以我不确定如何进行。我正在尝试构建一个 HQL 查询,该查询仅返回表中与作为 FK 的列匹配的行到另一个表中的 PK。

这是我的代码:

实体书:

@Entity
@Table(name="book")
public class Book {

@Id
private String bookNumber;
private String bookName;
private String bookDescription; 
private double bookPrice;

@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="shelfnumber")
Shelf shelf;

实体货架:

@Entity
@Table(name="shelf")
public class Shelf {

@Id
private String shelfNumber;

@OneToMany(mappedBy="shelf",cascade=CascadeType.ALL)
Set<Book> shelfBooks;

注意:两个实体类都有getters/setters

Action 类:

    DynaActionForm searchForm =((DynaActionForm)form);
    String shelfNum = searchForm.getString("shelfNum");

    SessionFactory sessionFactory = new   Configuration().configure().buildSessionFactory();
    Session session = sessionFactory.openSession();
    session.beginTransaction();

    try{
        session.getEntityMode();
        Query query = session.createQuery("FROM Book B WHERE B.shelf = :shelfNum"); //here is where the error happens: B.shelf is the problem but don't know why
        query.setParameter("shelfNum", shelfNum);
        List books = query.list();
        request.setAttribute("books", books);

    } finally{
        session.close();
    }

我得到的错误信息:

org.hibernate.PropertyAccessException: could not get a field value by reflection getter of com.library.entity.Shelf.shelfNumber

再往下我看到:

Caused by: java.lang.IllegalArgumentException: Can not set java.lang.String field com.library.entity.Shelf.shelfNumber to java.lang.String

感谢您的帮助!

最佳答案

您的查询将 Shelf 的实例与 String 的实例进行比较。那是行不通的。 Shelf 是一个 Shelf。它不是 String

查询应该是

select b from Book b where b.shelf.shelfNumber = :shelfNum

另外,请告诉我您实际上并没有在每次请求时都重新创建 SessionFactory!

stop using raw types .我们已经不是 2003 年了。

关于java - 组织.hibernate.PropertyAccessException : could not get a field value by reflection getter of,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33327906/

相关文章:

java - 让 Struts 与 JSF 一起工作

java - 在 AuthenticationSuccessHandler 中设置 session 范围的对象

java - 仅打印 (n*n) 数组的非边界和角元素

sql - JPA batch_size 属性不适用于 native 查询

java - 项目重建后 Hibernate H2 数据库锁定

java - 在(Java开发者)面试之前你应该学习哪些常识?

postgresql - 通过计算不同的列值来限制查询

java - 将实体映射到 native SQL 查询

java - 如何在Hibernate中动态添加Entity?

java - Joda-Time - 天数不增加