gpt4 book ai didi

java - 无法通过 的反射 setter 设置字段值

转载 作者:行者123 更新时间:2023-11-29 05:08:35 25 4
gpt4 key购买 nike


我在这个论坛看到过类似的问题,这里是Mapping Value in Junction Table & hibernate.PropertyAccessException: could not set a field value by reflection setter
我已经应用了这个问题中提到的解决方案,但我仍然面临同样的问题。我不知道我错过了什么。我的类(class) -

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;
}


}

员工.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 一起使用。

关于java - 无法通过 <class> 的反射 setter 设置字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29545572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com