簡體   English   中英

無法通過反射設置器設置字段值<class>

[英]could not set a field value by reflection setter of <class>


我在這個論壇中看到過類似的問題,這里是Junction Table中的映射值和hibernate.PropertyAccessException:無法通過反射setter設置字段值
我已經應用了這個問題中提到的解決方案,但我仍面臨同樣的問題。 我不知道我錯過了什么。 我的課程 -

EmployeeID.java

@IdClass(value = EmployeeID.class)
public class EmployeeID implements Serializable{

    private int empID;
    private int deptID;

    public EmployeeID() {

    }

    public EmployeeID(int empID, int deptID) {
        this.empID = empID;
        this.deptID = deptID;
    }

    public int getEmpID() {
        return empID;
    }

    public int getDeptID() {
        return deptID;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + deptID;
        result = prime * result + empID;
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        EmployeeID other = (EmployeeID) obj;
        if (deptID != other.deptID)
            return false;
        if (empID != other.empID)
            return false;
        return true;
    }


}

Employee.java

@Entity(name="EMPLOYEE")
@IdClass(value = EmployeeID.class)
public class Employee {

    @Id @GeneratedValue
    @Column(name="EMP_ID")
    private int empID;

    @Id @GeneratedValue
    @Column(name="DEPT_ID")
    private int deptID;

    public int getEmpID() {
        return empID;
    }
    public void setEmpID(int empID) {
        this.empID = empID;
    }
    public int getDeptID() {
        return deptID;
    }
    public void setDeptID(int deptID) {
        this.deptID = deptID;
    }

    @Column(name="EMP_NAME")
    private String empName;

    public String getEmpName() {
        return empName;
    }
    public void setEmpName(String empName) {
        this.empName = empName;
    }
}

這是我的測試代碼 -

try {
            Employee emp = new Employee();
            emp.setEmpName("New Employee");

            Session session = factory.openSession();
            session.beginTransaction();

            session.save(emp);

            session.getTransaction().commit();
            session.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            factory.close();
        }

在運行此測試代碼時,我得到此異常跟蹤 -

org.hibernate.PropertyAccessException: could not set a field value by reflection setter of EmployeeID.deptID
    at org.hibernate.property.DirectPropertyAccessor$DirectSetter.set(DirectPropertyAccessor.java:134)
    at org.hibernate.mapping.Component$ValueGenerationPlan.execute(Component.java:441)
    at org.hibernate.id.CompositeNestedGeneratedValueGenerator.generate(CompositeNestedGeneratedValueGenerator.java:121)
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:117)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:209)
    at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:194)
    at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
    at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:715)
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:707)
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:702)
    at CompositeKeyDemo.main(CompositeKeyDemo.java:15)
Caused by: java.lang.IllegalArgumentException: Can not set int field EmployeeID.deptID to org.hibernate.id.IdentifierGeneratorHelper$2
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:164)
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:168)
    at sun.reflect.UnsafeIntegerFieldAccessorImpl.set(UnsafeIntegerFieldAccessorImpl.java:98)
    at java.lang.reflect.Field.set(Field.java:741)
    at org.hibernate.property.DirectPropertyAccessor$DirectSetter.set(DirectPropertyAccessor.java:122)
    ... 12 more

我做的事情很傻。

提前致謝 !!

我不認為你可以將@GeneratedValue與@IdClass一起使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM