【发布时间】:2014-09-19 13:43:26
【问题描述】:
Hibernate 抛出异常:
org.hibernate.PropertyAccessException:
could not get a field value by reflection getter of test.model.Part.part
零件实体类:
@Table(name = "part")
@Entity
public class Part implements Serializable {
@Id @GeneratedValue
@Column(name = "part")
private int part;
public int getPart() {
return part;
}
public void setPart(int part) {
this.part = part;
}
@OneToMany(mappedBy = "part")
private Collection<ProductPart> productPartsByPart;
public Collection<ProductPart> getProductPartsByPart() {
return productPartsByPart;
}
.....
}
似乎实体类具有正确的注释,但 Hibernate 无法访问 id 和 Part 表中的 主键 属性。如何解决?
它被调用:
ProductPart productPart = (ProductPart) sessionFactory
.getCurrentSession()
.createCriteria(ProductPart.class)
.add(Restrictions.eq("part", cPartId))
.add(Restrictions.eq("product", productId)).uniqueResult();
更新:
Caused by: java.lang.IllegalArgumentException:
Can not set int field Part.part to java.lang.Integer
更新 2:
我有 product_part 表,它有 fk 并在 part 表中引用 part。我必须使用@OneToMany(mappedBy = "part") 吗?
@Entity
@Table (name = "part")
public class Part implements Serializable {
@Id @GeneratedValue
@Column(name = "part")
@OneToMany(mappedBy = "part")
private int part;
UPDATE3
当我声明我只需要在 product_part 表上执行搜索时,我不明白为什么 Hibernate 尝试访问 Part 表。也没有必要访问其他表,因为我只需要 product_part 中的字段,该字段已经给出了 part 和 product 的值(这两个都是外键)......
更新4:
@Entity
@Table(name = "product_part")
public class ProductPart implements Serializable {
@Id
@GeneratedValue
@Column(name = "id")
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@ManyToOne
@JoinColumn(name = "product", referencedColumnName = "product", nullable = false)
private Product product;
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
@JoinColumn(name = "part", referencedColumnName = "part", nullable = false)
@ManyToOne
private Part part;
public Part getPart() {
return part;
}
public void setPart(Part partByPart) {
this.part = partByPart;
}
}
【问题讨论】:
-
您是否尝试使用 Table 注释反转实体注释?
-
仅使用您提供的信息,看起来 Hibernate 能够访问
getPart()方法,但未设置字段的 int 值。如果您尝试访问某个持久对象,请验证数据库上的part字段是否设置正确。 -
将您的“部分”字段类型更改为整数
-
@Snorky35,仍然有错误
Can not set java.lang.Integer field .... to java.lang.Integer -
你应该参考part.part吧?