【问题标题】:could not get a field value by reflection getter and query to sum multiple columns in pure Hibernate无法通过反射 getter 和查询获取字段值以对纯 Hibernate 中的多个列求和
【发布时间】:2016-12-19 07:03:04
【问题描述】:

我已经编写了这个查询,但是遇到了这个查询的问题。 我想在 Hibernate 中编写该查询。

Query getActivoCrtTotalquery = (Query) session
                .createQuery("select sum(a.servicios_por_pagares)+sum(a.producto_en_processo)+sum(a.materia_prima)+sum(a.moteriales)+sum(a.marcaderia_en_transito)+sum(a.mercaderia)+sum(a.productos_terminado) from Activocrt_Master a where a.dni=:dni" );

        getActivoCrtTotalquery.setParameter("dni", dni);
                List list = getActivoCrtTotalquery.list();
            result = (double) list.get(0);
            session.close();

例外

org.hibernate.PropertyAccessException:无法通过以下方式获取字段值 com.caja.creditprocess.hbmfiles.Doi_Master.dni 的反射吸气剂 在 org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:35) 在 org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:183) 在 org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:3596) 在 org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:3312) 在 org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:181) 在 org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:218) 在 org.hibernate.type.EntityType.getIdentifier(EntityType.java:397) 在 org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:87) 在 org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:38) 在 org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:491) 在 org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1563) 在 org.hibernate.loader.Loader.doQuery(Loader.java:673) 在 org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236) 在 org.hibernate.loader.Loader.doList(Loader.java:2213) 在 org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104) 在 org.hibernate.loader.Loader.list(Loader.java:2099) 在 org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378) 在 org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338) 在 org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172) 在 org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121) 在 org.hibernate.impl.QueryImpl.list(QueryImpl.java:79) 在 com.caja.creditprocess.daoimpl.EvaluationDAOImpl.getActivoCrtTotal(EvaluationDAOImpl.java:302) 在 com.caja.creditprocess.managerimpl.EvaluationManagerImpl.saveActivo(EvaluationManagerImpl.java:278) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:302) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) 在 org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 在 org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208) 在 com.sun.proxy.$Proxy28.saveActivo(未知来源) EvaluationTest.sendActivoDetails(EvaluationTest.java:150) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) 在 org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 在 org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) 在 org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 在 org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74) 在 org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83) 在 org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231) 在 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 在 org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 在 org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 在 org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 在 org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 在 org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 在 org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 在 org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71) 在 org.junit.runners.ParentRunner.run(ParentRunner.java:309) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174) 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 在 org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 引起:java.lang.IllegalArgumentException:无法设置 java.lang.String 字段 com.caja.creditprocess.hbmfiles.Doi_Master.dni 到 java.lang.String 在 sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167) 在 sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171) 在 sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:58) 在 sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.java:36) 在 java.lang.reflect.Field.get(Field.java:393) 在 org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:32) ... 62 更多

我的实体是

  @Entity
@Table(name="Activocrt_Master")
public class Activocrt_Master implements Serializable{

    @Id
    @Column(name="activocrt_master_id")
    private String activocrt_master_id;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name="dni")
    private Doi_Master dni;


    @Column(name="servicios_por_pagares")
    private double servicios_por_pagares;

    @Column(name="producto_en_processo")
    private double producto_en_processo;

    @Column(name="materia_prima")
    private double materia_prima;

    @Column(name="moteriales")
    private double moteriales;

    @Column(name="marcaderia_en_transito")
    private double marcaderia_en_transito;

    @Column(name="mercaderia")
    private double mercaderia;

    @Column(name="productos_terminado")
    private double productos_terminado;

//setters and getters

}

Doi_Master.java

@Entity
@Table(name="Doi_Master")
public class Doi_Master implements Serializable{

    @Id
    @Column(name="dni")
    private String dni;

//setters and getters
}

【问题讨论】:

  • 什么问题?添加更多信息,也许例外?
  • 我认为这不是 Hibernate 查询,这是正常的 jdbc 查询,我得到了那种异常
  • 你要填写的类的字段名是什么?您缺少 select column_1 as field_name from table where column_2 = :dni。 Spring 使用反射,因此您必须输入正确的名称。在您的班级中,您需要一个 getter getDni 和一个 setter setColumn_1。因此错误无法通过 com.caja.creditprocess.hbmfiles.Doi_Master.dni 的反射 getter 获取字段值。
  • @Deceiver 我想总结一些记录,而不是全部
  • @Deceiver 在哪个类中我需要一个setter setColumn_1。

标签: java database spring hibernate hibernate-criteria


【解决方案1】:

我终于找到了我的问题的答案。在我的查询中,我添加了 dni,但是 hibernate 混淆了使用哪个 dni。我刚刚将private Doi_Master dni; 更改为private Doi_Master xyz;所以它对我有用。谢谢你的帮助....

【讨论】:

    猜你喜欢
    • 2013-08-15
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    • 2012-08-14
    • 1970-01-01
    • 2011-06-25
    • 2014-12-03
    相关资源
    最近更新 更多