Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate:通过永久属性的反射访问字段[private java.lang.Integer]时出错_Java_Hibernate_Jpa_Orm - Fatal编程技术网

Hibernate:通过永久属性的反射访问字段[private java.lang.Integer]时出错

Hibernate:通过永久属性的反射访问字段[private java.lang.Integer]时出错,java,hibernate,jpa,orm,Java,Hibernate,Jpa,Orm,我在尝试获取实体属性时遇到了奇怪的问题: Hibernate: select tarifklsk0_.ID as ID1_12_0_, tarifklsk0_.FK_TARIF as FK_TARIF2_12_0_, tarifservp1_.FK_TARIF as FK_TARIF2_11_1_, tarifservp1_.ID as ID1_11_1_, tarifservp1_.ID as ID1_1

我在尝试获取实体属性时遇到了奇怪的问题:

Hibernate: 
    select
        tarifklsk0_.ID as ID1_12_0_,
        tarifklsk0_.FK_TARIF as FK_TARIF2_12_0_,
        tarifservp1_.FK_TARIF as FK_TARIF2_11_1_,
        tarifservp1_.ID as ID1_11_1_,
        tarifservp1_.ID as ID1_11_2_,
        tarifservp1_.FK_TARIF as FK_TARIF2_11_2_,
        tarifservp1_.N1 as N3_11_2_ 
    from
        TR.TARIFXKLSK tarifklsk0_ 
    left outer join
        TR.TARIF_SERV_PROP tarifservp1_ 
            on tarifklsk0_.FK_TARIF=tarifservp1_.FK_TARIF 
    where
        tarifklsk0_.ID=?
Jun 13, 2016 7:38:26 AM org.hibernate.event.internal.DefaultLoadEventListener doOnLoad
INFO: HHH000327: Error performing load command : org.hibernate.property.access.spi.PropertyAccessException: Error accessing field [private java.lang.Integer TarifKlsk.fkTarif] by reflection for persistent property [TarifKlsk#fkTarif] : 1027303
Exception in thread "main" org.hibernate.property.access.spi.PropertyAccessException: Error accessing field [private java.lang.Integer TarifKlsk.fkTarif] by reflection for persistent property [TarifKlsk#fkTarif] : 1027303
    at org.hibernate.property.access.spi.GetterFieldImpl.get(GetterFieldImpl.java:43)
    ....skipped...
Caused by: java.lang.IllegalArgumentException: Can not set java.lang.Integer field TarifKlsk.fkTarif to java.lang.Integer
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171)       
我的实体:

@Entity
@Data
@EqualsAndHashCode(callSuper = true, doNotUseGetters = true)
@ToString(callSuper = true, doNotUseGetters = true)
public class Keuze extends MainTable {

@NonNull
String naam;

@Tolerate
public Keuze() {
}

}
塔里夫克尔斯克

我的测试模块:

    public static void main(String[] args) {
        SessionFactory sf = HibernateUtil.getSessionFactory();
        Session sess = sf.openSession();
        sess.beginTransaction();

        TarifKlsk k2=sess.get(TarifKlsk.class, 1027303);
        for (TarifServProp t : k2.getTarifservprop()) {
             System.out.println("Tar="+t.getN1());
        }

        System.out.println("End init");
我做错了什么?我已经检查了这些实体的所有字段,并且所有字段都已正确命名

Updt 我的POM.xml


4.0.0
com.journaldev.hibernate
Hibernateehcache示例
0.0.1-快照
Hibernate二级缓存示例使用EHCache实现
org.hibernate
冬眠核心
5.1.0.1最终版本
net.sf.ehcache
ehcache内核
2.6.11
org.hibernate
休眠ehcache
5.2.0.1最终版本
org.slf4j
slf4j简单
1.7.5
Upd2


我发现我的子实体不包含与主实体的fk_tarif对应的fk_tarif记录。。。但我认为这没关系,为什么会存在错误

这是版本5.0和5.1.0中的错误

我建议您继续使用hibernate 4.X.X版而不是5版,因为它不是100%稳定的(2000年发行的更多版本)


祝你好运

我正在使用EAP7,它包含Hibernate核心{5.0.9.Final-redhat-1}

我有两个实体:

@Entity
@Data
@EqualsAndHashCode(callSuper = true, doNotUseGetters = true)
@ToString(callSuper = true, doNotUseGetters = true)
public class Keuze extends MainTable {

@NonNull
String naam;

@Tolerate
public Keuze() {
}

}

在Waarde上调用merge时,会抛出以下错误:

Caused by: org.hibernate.property.access.spi.PropertyAccessException: Error accessing field [java.lang.Long vo.cjsm.monitoring.data.schema.dynamic.main.MainTable.id] by reflection for persistent property [vo.cjsm.monitoring.data.schema.dynamic.field.Keuze#id] : Keuze(super=MainTable(id=1, version=0), naam=Leesmotivatie)
at org.hibernate.property.access.spi.GetterFieldImpl.get(GetterFieldImpl.java:43)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:223)
at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:4601)
at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:148)
at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:850)
at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:832)
at org.hibernate.engine.spi.CascadingActions$6.cascade(CascadingActions.java:260)
at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:398)
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323)
at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:162)
at org.hibernate.engine.internal.Cascade.cascadeCollectionElements(Cascade.java:431)
at org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:363)
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:326)
at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:162)
at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:111)
at org.hibernate.event.internal.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:468)
at org.hibernate.event.internal.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:327)
at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:170)
at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:69)
at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:840)
at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:822)
at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:827)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:1161)
... 149 more
Caused by: java.lang.IllegalArgumentException: Can not set java.lang.Long field vo.cjsm.monitoring.data.schema.dynamic.main.MainTable.id to java.lang.String
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171)
at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:58)
at sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.java:36)
at java.lang.reflect.Field.get(Field.java:393)
at org.hibernate.property.access.spi.GetterFieldImpl.get(GetterFieldImpl.java:39)
... 171 more
通过删除Lombok的ToString行并通过重写默认的ToString来添加我自己的ToString实现,错误消息消失了,代码正在恢复

现在,实体如下所示:

@Entity
@Data
@EqualsAndHashCode(callSuper = true, doNotUseGetters = true)
public class Keuze extends MainTable {

@NonNull
String naam;

@Tolerate
public Keuze() {
}

@Override
public String toString() {

    return getId().toString();
}

}
所以不知为什么,toString方法对hibernate合并代码的方式有影响。。。别问我是怎么做的:-)这似乎很管用。我在网上尝试了其他一切,但没有成功


希望这对其他人有帮助

在我的例子中,问题是在我的模型中,setter是自动生成的

public void setComments(List comments){
}

没有类型。通过将其设置为
列表注释

将Hibernate 4升级到5后,我遇到了相同的错误。此时,hibernate bug似乎在5.3之前的任何版本中都没有得到修复。在我的例子中,这个错误发生在使用非主键(我知道,不是一个好的关系模型)的属性从一个实体a懒洋洋地获取一个实体a的集合时,该集合与B具有一对多的关系。实际上,这可能是一个比这更复杂的边缘情况,但我现在没有时间在一个最小的测试用例中重现它)

在通过hibernate代码进行跟踪时,hibernate似乎在尝试为B的查询绑定参数时感到困惑,并且当它认为它试图从对象A获取外键、属性时,实际上它已经具有属性值。代码将该值视为对象A,并以上面显示的反射错误结束


我能够通过将一对多关系更改为B和lazy来克服这个错误。我希望这对其他人有所帮助。

这太奇怪了,但当我将Hibernate版本设置为4.1.9.Final时,我的代码运行良好:*********获取计数=0秒级命中计数=0秒级未命中计数=0秒级放置计数=0完成!可能是hibernate更高版本4.1.9中的错误?该解决方案帮助我解决了这个错误。我也希望你。如果有帮助的话,我在SpringBoot2+Hibernate5应用程序中也遇到了同样的错误。此错误是由spring devtools启动器引起的。如果你认为这和实时重新加载有点关联的话。在5.2.0-FINAL中仍然是一个bug。我通过恢复到4.3.11-FINAL来解决问题。
@MappedSuperclass
@Data
@Cacheable
public abstract class MainTable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;

@Version
Long version;

}
Caused by: org.hibernate.property.access.spi.PropertyAccessException: Error accessing field [java.lang.Long vo.cjsm.monitoring.data.schema.dynamic.main.MainTable.id] by reflection for persistent property [vo.cjsm.monitoring.data.schema.dynamic.field.Keuze#id] : Keuze(super=MainTable(id=1, version=0), naam=Leesmotivatie)
at org.hibernate.property.access.spi.GetterFieldImpl.get(GetterFieldImpl.java:43)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:223)
at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:4601)
at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:148)
at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:850)
at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:832)
at org.hibernate.engine.spi.CascadingActions$6.cascade(CascadingActions.java:260)
at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:398)
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323)
at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:162)
at org.hibernate.engine.internal.Cascade.cascadeCollectionElements(Cascade.java:431)
at org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:363)
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:326)
at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:162)
at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:111)
at org.hibernate.event.internal.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:468)
at org.hibernate.event.internal.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:327)
at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:170)
at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:69)
at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:840)
at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:822)
at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:827)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:1161)
... 149 more
Caused by: java.lang.IllegalArgumentException: Can not set java.lang.Long field vo.cjsm.monitoring.data.schema.dynamic.main.MainTable.id to java.lang.String
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171)
at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:58)
at sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.java:36)
at java.lang.reflect.Field.get(Field.java:393)
at org.hibernate.property.access.spi.GetterFieldImpl.get(GetterFieldImpl.java:39)
... 171 more
@Entity
@Data
@EqualsAndHashCode(callSuper = true, doNotUseGetters = true)
public class Keuze extends MainTable {

@NonNull
String naam;

@Tolerate
public Keuze() {
}

@Override
public String toString() {

    return getId().toString();
}

}
public void setComments(List comments){
}