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

Java org.hibernate.PropertyAccessException:无法通过的反射getter获取字段值,java,hibernate,Java,Hibernate,我环顾四周寻找答案,这似乎与思考有关,但由于我没有处理它们,我不确定如何继续。我正在尝试构建一个HQL查询,该查询只返回表中与另一个表中的某个FK列和某个PK相匹配的行 我的代码是这样的: 实体账簿: @Entity @Table(name="book") public class Book { @Id private String bookNumber; private String bookName; private String bookDescription; private dou

我环顾四周寻找答案,这似乎与思考有关,但由于我没有处理它们,我不确定如何继续。我正在尝试构建一个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;
我收到的错误消息:

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
的实例进行比较。那不行。
。它不是一个
字符串

查询应该是

select b from Book b where b.shelf.shelfNumber = :shelfNum
另外,请告诉我,您并没有在每次请求时都重新创建SessionFactory


请。我们不再是2003年了。

谢谢你的帮助!这很有效。别担心,我不会每次都重新创建SessionFactory,这只是为了演示,但我会检查您对原始类型的建议。再次感谢!
select b from Book b where b.shelf.shelfNumber = :shelfNum