繁体   English   中英

org.hibernate.PropertyAccessException:无法通过反射getter获取字段值

[英]org.hibernate.PropertyAccessException: could not get a field value by reflection getter of

我四处寻找答案,看起来它与思考有关,但由于我没有处理它们,我不知道该怎么办。 我正在尝试构建一个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;

注意:两个实体类都有getter / setter

ActionClass:

    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实例进行比较。 那不行。 ShelfShelf 它不是一个String

查询应该是

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

另外,请告诉我你实际上并没有在每个请求中重新创建一个SessionFactory!

停止使用原始类型 我们不再是2003年了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM