3

I am deleloping a small spring and hibernate program, And i want to get sum of values from database. For that i written below code

public double getDataFromDb(String num) {

        Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();
        double result=0;

        Query getSumquery=(Query)session.createQuery("select sum(amount) from User_Master where  =:num");
        getSumquery.setParameter("num",num);
        List list =getSumquery.list();
        result=(double) list.get(0);
        tx.commit();

Here i am getting exception in list line.When running from junit testcasethe Exception is like below

org.hibernate.PropertyAccessException: could not get a field value by reflection getter of com.abc.process.hbmfiles.Number.num
    at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:35)
    at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:183)
    at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:3596)
    at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:3312)
    at org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:181)
    at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:218)
    at org.hibernate.type.EntityType.getIdentifier(EntityType.java:397)
    at org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:87)
    at org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:38)
    at org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:491)
    at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1563)
    at org.hibernate.loader.Loader.doQuery(Loader.java:673)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
    at org.hibernate.loader.Loader.doList(Loader.java:2213)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
    at org.hibernate.loader.Loader.list(Loader.java:2099)
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
    at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
    at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
    at com.creditprocess.daoimpl.EvaluationDAOImpl.getCrtTotal(EvaluationDAOImpl.java:294)
    at com.creditprocess.managerimpl.EvaluationManagerImpl.saveData(EvaluationManagerImpl.java:264)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:302)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208)
    at com.sun.proxy.$Proxy28.saveData(Unknown Source)
    at EvaluationTest.sendDetails(EvaluationTest.java:150)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83)
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174)
    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:459)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: java.lang.IllegalArgumentException: Can not set java.lang.String field com.caja.creditprocess.hbmfiles.Doi_Master.dni 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.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:32)
    ... 62 more

These are my entities User_Master.java

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

@Id
@Column(name="User_master_id")
private String user_master_id;

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name="num")
private Number num;
}

Number.java

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

@Id
@Column(name="num")
private String num;
}
3
  • 1
    Please share the code of your entity class, as suggested. Also, I agree with Gokul: you can't have a key=value statement passed as parameter, only the value Commented Aug 11, 2016 at 12:38
  • What type is Doi_Master.dni? Commented Aug 11, 2016 at 13:23
  • Here Doi_master.dni is nothing but User_Master.num Commented Aug 11, 2016 at 14:39

2 Answers 2

1

If you are using conditional statement then you have to define some condition after where so here I think You are mission your Entity Variable (num) reference....

        public double getDataFromDb(String num) {
        Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();
        double result=0;

        Query getSumquery=(Query)session.createQuery("select sum(u.amount) from User_Master u where u.num  =:num");
        getSumquery.setParameter("num",num);
        List list =getSumquery.list();
        result=(double) list.get(0);
        tx.commit();
}
Sign up to request clarification or add additional context in comments.

3 Comments

No Gokul it's not working still getting the same exception my problem is related to java.lang.string type. please check the exception once...
Can you share your entity class pls.... any way i forgot to write u.amount so you can try once more.
AND the String num must be converted to a numeric type. Double.parseDouble(num)
0

While using reflection, I also faced the same problem and the mistake I have done was instead of writing:

Arrays.asList(object.getClass().getDeclaredFields()).forEach(field -> {
    field.setAccessible(true);
        try {
            System.out.pringln(String.valueOf(field.get(object)));
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    });

I wrote:

Arrays.asList(object.getClass().getDeclaredFields()).forEach(field -> {
    field.setAccessible(true);
        try {
            System.out.pringln(String.valueOf(field.get(object.getField())));
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    });

meaning to say that I tried to get objects field while giving its value as an argument.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.