JPA-Hibernate-“无法通过继承的反射获取器获取字段值

用户名

我有一个实体,它是某些实体的基类。

@Entity
@Table(name = "resource")
@Inheritance(strategy = InheritanceType.JOINED)
public class Resource implements Serializable{

}

我有一些从Resource扩展的子类

@Entity
@Table(name = "ResourceWithA")
@PrimaryKeyJoinColumn(name = "ResourceWithA_id")
public class ResourceWithA extends Resource implements Serializable, AInterface{

    @Column
    private boolean inService;
    @Override
    public void setInService(boolean inService) {
        this.inService = inService;
    }

    @Override
    public boolean getInService() {
       return inService;
    }

}

@Entity
@Table(name = "ResourceWithB")
@PrimaryKeyJoinColumn(name = "ResourceWithB_id")
public class ResourceWithB extends ResourceWithA implements Serializable{

}

当我想插入数据时,出现以下异常。我不是只为inService属性获得此异常。Class还有其他一些属性,例如Collection,它们也有问题

javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of com.ResourceWithB.inService
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1214)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1147)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1153)
at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:695)
at com.test.persistence.ConnectionTest.saveData(ConnectionTest.java:44)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of com.ResourceWithB.inService
at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:62)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.getPropertyValues(AbstractEntityTuplizer.java:485)
at org.hibernate.tuple.entity.PojoEntityTuplizer.getPropertyValues(PojoEntityTuplizer.java:243)
at org.hibernate.persister.entity.AbstractEntityPersister.getPropertyValues(AbstractEntityPersister.java:3834)
at org.hibernate.event.def.DefaultMergeEventListener.copyValues(DefaultMergeEventListener.java:600)
at org.hibernate.event.def.DefaultMergeEventListener.mergeTransientEntity(DefaultMergeEventListener.java:337)
at org.hibernate.event.def.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:303)
at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:258)
at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:869)
at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:851)
at org.hibernate.engine.CascadingAction$6.cascade(CascadingAction.java:279)
at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:392)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:335)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)
at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:425)
at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:362)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:338)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)
at org.hibernate.engine.Cascade.cascade(Cascade.java:161)
at org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:476)
at org.hibernate.event.def.DefaultMergeEventListener.mergeTransientEntity(DefaultMergeEventListener.java:388)
at org.hibernate.event.def.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:303)
at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:258)
at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:84)
at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:859)
at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:843)
at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:847)
at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:686)
... 24 more
Caused by: java.lang.IllegalArgumentException: Can not set boolean field com.ResourceWithA.inService to com.Resource
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:146)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:150)
at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:37)
at sun.reflect.UnsafeBooleanFieldAccessorImpl.getBoolean(UnsafeBooleanFieldAccessorImpl.java:22)
at sun.reflect.UnsafeBooleanFieldAccessorImpl.get(UnsafeBooleanFieldAccessorImpl.java:18)
at java.lang.reflect.Field.get(Field.java:358)
at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:59)
... 51 more

编辑: setter和getter方法。正如我所说的,此问题不仅与inService字段有关。如果我将其注释为@Transient,则其他字段也会抛出相同的异常。

public interface AInterface {
    public void setInService(boolean inService);

    public boolean getInService();
}

编辑:我注意到这种情况。我有一个存储资源列表的容器类。有一些级联定义,

public class Container{
@Id
@GeneratedValue
@Column(name = "container_id")
private long id; // unique identifier
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinTable(name = "container_resources", joinColumns = {
    @JoinColumn(name = "container_id", referencedColumnName = "container_id")
}, inverseJoinColumns = {
    @JoinColumn(name = "id", referencedColumnName = "id")
})
/** list of resources inside power system. */
private Collection<Resource> resources = new HashSet<Resource>();

}

我正在对Container执行保存操作。em.merge(容器)。

如果资源内部只有一种类型的资源,则不存在任何问题。如果我有多种资源类型,则它们将设置/获取反射错误。

用户名

正如我在问题描述中提到的那样,我正在使用em.merge。当我使用persist时,问题就解决了。但是我不知道解决方案背后的真正原因是什么。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

org.hibernate.PropertyAccessException:无法通过反射获取器获取字段值

来自分类Dev

javax.persistence.PersistenceException:org.hibernate.PropertyAccessException:无法通过Entity.id的反射获取器获取字段值

来自分类Dev

JPA Hibernate OneToMany获取

来自分类Dev

从JPA的entityManagerFactory获取Hibernate SessionFactory

来自分类Dev

继承JPA和Hibernate问题

来自分类Dev

继承Hibernate / JPA多个级别

来自分类Dev

如何通过JPA / Hibernate加入获取两个关联

来自分类Dev

Hibernate Native与Hibernate JPA

来自分类Dev

没有ID的JPA / Hibernate继承

来自分类Dev

Hibernate/JPA 添加计算字段

来自分类Dev

Spring Hibernate JPA JSF“无法建立EntityManagerFactory”

来自分类Dev

Play + JPA + Hibernate + PostgreSQL:无法创建表

来自分类Dev

Spring和hibernate集成无法打开JPA

来自分类Dev

JPA / HIBERNATE:值必须为常数

来自分类Dev

JPA Hibernate Persistence异常[PersistenceUnit:默认]无法构建Hibernate SessionFactory

来自分类Dev

NamedEntityGraph-JPA / Hibernate抛出org.hibernate.loader.MultipleBagFetchException:无法同时获取多个包

来自分类Dev

JPA:从JOINED继承的子类中获取字段

来自分类Dev

JPA Hibernate Lazy多对一获取代理

来自分类Dev

Transaction not active - Hibernate - JPA

来自分类Dev

JPA + Hibernate + CrudRepository刷新?

来自分类Dev

Hibernate / JPA的Java配置?

来自分类Dev

如何在Hibernate JPA @NamedEntityGraph中引用继承的属性?

来自分类Dev

继承类上的JPA / Hibernate关系返回null

来自分类Dev

如何在Hibernate JPA @NamedEntityGraph中引用继承的属性?

来自分类Dev

JPA Hibernate ::实体的继承,以及其他OneToMany列表

来自分类Dev

合并后,Hibernate / JPA获取数据库中具有默认值的列的值

来自分类Dev

多个@ManyToOne字段指向JPA / Hibernate中的同一实体

来自分类Dev

基于外键的增量字段(JPA,Hibernate,Oracle DB)

来自分类Dev

为什么JPA \ Hibernate不自动创建此映射字段?

Related 相关文章

  1. 1

    org.hibernate.PropertyAccessException:无法通过反射获取器获取字段值

  2. 2

    javax.persistence.PersistenceException:org.hibernate.PropertyAccessException:无法通过Entity.id的反射获取器获取字段值

  3. 3

    JPA Hibernate OneToMany获取

  4. 4

    从JPA的entityManagerFactory获取Hibernate SessionFactory

  5. 5

    继承JPA和Hibernate问题

  6. 6

    继承Hibernate / JPA多个级别

  7. 7

    如何通过JPA / Hibernate加入获取两个关联

  8. 8

    Hibernate Native与Hibernate JPA

  9. 9

    没有ID的JPA / Hibernate继承

  10. 10

    Hibernate/JPA 添加计算字段

  11. 11

    Spring Hibernate JPA JSF“无法建立EntityManagerFactory”

  12. 12

    Play + JPA + Hibernate + PostgreSQL:无法创建表

  13. 13

    Spring和hibernate集成无法打开JPA

  14. 14

    JPA / HIBERNATE:值必须为常数

  15. 15

    JPA Hibernate Persistence异常[PersistenceUnit:默认]无法构建Hibernate SessionFactory

  16. 16

    NamedEntityGraph-JPA / Hibernate抛出org.hibernate.loader.MultipleBagFetchException:无法同时获取多个包

  17. 17

    JPA:从JOINED继承的子类中获取字段

  18. 18

    JPA Hibernate Lazy多对一获取代理

  19. 19

    Transaction not active - Hibernate - JPA

  20. 20

    JPA + Hibernate + CrudRepository刷新?

  21. 21

    Hibernate / JPA的Java配置?

  22. 22

    如何在Hibernate JPA @NamedEntityGraph中引用继承的属性?

  23. 23

    继承类上的JPA / Hibernate关系返回null

  24. 24

    如何在Hibernate JPA @NamedEntityGraph中引用继承的属性?

  25. 25

    JPA Hibernate ::实体的继承,以及其他OneToMany列表

  26. 26

    合并后,Hibernate / JPA获取数据库中具有默认值的列的值

  27. 27

    多个@ManyToOne字段指向JPA / Hibernate中的同一实体

  28. 28

    基于外键的增量字段(JPA,Hibernate,Oracle DB)

  29. 29

    为什么JPA \ Hibernate不自动创建此映射字段?

热门标签

归档