Java 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

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;
        }
    .....
  }
更新:

    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相等的操作,抱歉,消息太长