Java Hibernate在访问带注释属性的值时遇到问题
Hibernate引发异常:Java Hibernate在访问带注释属性的值时遇到问题,java,hibernate,Java,Hibernate,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
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;
}
.....
}
更新:
Caused by: java.lang.IllegalArgumentException:
Can not set int field Part.part to java.lang.Integer
@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;
}
}
ProductPart productPart = (ProductPart) sessionFactory
.getCurrentSession()
.createCriteria(ProductPart.class)
.add(Restrictions.eq("part.part", cPartId))
.add(Restrictions.eq("product", productId)).uniqueResult();//here similarly access your Product's @Id
//something like product.productId
更新2:
我有product\u part
表,其中包含fk和part
表中的part
。我必须使用@OneToMany(mappedBy=“part”)
更新3
我不明白为什么Hibernate在我声明只需要在产品零件
表上执行搜索时,会尝试访问零件
表。也不需要访问其他表,因为我只需要product_part中的字段,它为part和product(都是外键)提供了值
更新4:
Caused by: java.lang.IllegalArgumentException:
Can not set int field Part.part to java.lang.Integer
@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;
}
}
ProductPart productPart = (ProductPart) sessionFactory
.getCurrentSession()
.createCriteria(ProductPart.class)
.add(Restrictions.eq("part.part", cPartId))
.add(Restrictions.eq("product", productId)).uniqueResult();//here similarly access your Product's @Id
//something like product.productId
您的零件在ProductPart中是如何引用的 应该是
ProductPart{
@ManyToOne
private Part part;
}
我想是的
将.add(Restrictions.eq(“part.part”,cPartId))
更改为。add(Restrictions.eq(“part.part”,cPartId))
编辑:
Caused by: java.lang.IllegalArgumentException:
Can not set int field Part.part to java.lang.Integer
@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;
}
}
ProductPart productPart = (ProductPart) sessionFactory
.getCurrentSession()
.createCriteria(ProductPart.class)
.add(Restrictions.eq("part.part", cPartId))
.add(Restrictions.eq("product", productId)).uniqueResult();//here similarly access your Product's @Id
//something like product.productId
您是否尝试将实体批注与表批注倒置?仅使用您提供的信息,Hibernate似乎能够访问
getPart()
方法,但未设置字段的int值。如果您试图访问某个持久对象,请验证数据库上的part
字段设置是否正确。将“part”字段类型更改为Integer@Snorky35,仍有错误无法设置java.lang.Integer字段。。。。对于java.lang.Integer
您应该参考part.part,对吗?当更改为时。添加(Restrictions.eq(“product_part.part”,cPartId))。添加(Restrictions.eq(“product_part.product”,productId)).uniqueResult()
它给出查询异常:无法解析属性:product\u part of:test.model.ProductPart
其中product\u part
是我们search@RCola,您可以发布productpart类吗?@RCola,您的productpart没有product\u part属性。所以你所做的是错误的。试试我的编辑,如果可以的话,我会解释一下。由于零件和产品是外键,它应该转到原始表以获得整个对象或行。在product\u part表中只有productid和partid,对吗?如果我没有弄错的话,您将partid和productid作为参数传递,这些参数是整数。如何将类型部件上的等于检查为Int类型?这就是为什么您必须访问part.part,它是partId要匹配的int。希望您能得到它。因为当您说.add(Restrictions.eq(“part”,cPartId)),productpart实体中的part类型是什么,它是part类型的,对吗?什么是cPartId,它是int,对吗?因此,即使您在product_part表中搜索,product_part.part的类型为part,无法与整数进行比较,但part.part是一个整数,您需要对其执行与cPartId相等的操作,抱歉,消息太长