-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 
Author Message
 Post subject: ClassCastException when using Query By Example
PostPosted: Thu Jun 30, 2005 3:49 pm 
Regular
Regular

Joined: Thu Jul 08, 2004 1:21 pm
Posts: 68
Location: Recife - Pernambuco - Brazil
Hi, I am getting a exception when trying to use query by example for a simple component. I haven't get this before, and I could not see where is the error. I am using Hibernate Annotations support for tests purpose. The information about error is below:

Hibernate version: 3.0.5
Hibernate Annotations: 3 beta2


Mapping documents:
Code:

@Entity( access = AccessType.FIELD )
@Inheritance( strategy = InheritanceType.JOINED )
@NamedQueries( {
    @NamedQuery( name = "People.findByEmail",
        queryString = "select p from People p where p.info.email = ?" ),
    @NamedQuery( name = "People.findByState",
        queryString = "select p from People p where p.address.state.id = ?" ),
    @NamedQuery( name = "People.findByCity",
        queryString = "select p from People p where p.address.city like ?" )
    }
)
public class People implements Identifiable<Long> {

    @Id( generate = GeneratorType.AUTO )
    @Column( name = "people_id" )
    private Long id;

    private String cpf;
    private String nickname;

    @Embedded
    private ContactInfo info;

    @Embedded
    private Address address;

    // equals, hashCode, toString, contructor, get and sets

}


Code between sessionFactory.openSession() and session.close():
The DAO method:
Code:
    public List<People> find( final People people ) throws DataAccessException {

        HibernateCallback callback = new HibernateCallback() {

            public Object doInHibernate( Session s ) throws HibernateException {

                Criteria criteria = s.createCriteria(People.class);

                Example example = Example.create(people);
                example.enableLike(MatchMode.ANYWHERE);
                example.excludeZeroes();

                criteria.add(example);

                if (people.getInfo() != null) {

                    Example infoExample = Example.create(people.getInfo());
                    infoExample.enableLike(MatchMode.ANYWHERE);
                    infoExample.excludeZeroes();

                    criteria.createCriteria("info").add(infoExample);

                }

                if (people.getAddress() != null) {

                    Example addrExample = Example.create(people.getAddress());
                    addrExample.enableLike(MatchMode.ANYWHERE);
                    addrExample.excludeZeroes();

                    criteria.createCriteria("address").add(addrExample);

                }

                return criteria.list();

            }

        };

        List<People> result;
        result = CallbackExecutor.executeFind(getHibernateTemplate(), callback);

        return result;
    }

And test case:
Code:
    public void testFind() throws DataAccessException {

        People example = new People();
        example.setNickname("benz");
       
        ContactInfo ci = new ContactInfo();
        ci.setName("bruno");
       
       
        Address a = new Address();
        a.setDistrict("madalena");
       
        example.setInfo(ci);
        example.setAddress(a);
       

        List<People> peoples = peopleDao.find(example);

        assertNotNull(peoples);
        Assert.assertFalse(peoples.isEmpty());
        assertNotNull(peoples.get(0).getInfo());

    }


Full stack trace of any exception that occurs:
Code:
java.lang.ClassCastException: br.ufpe.liber.theses.model.ContactInfo
   at org.hibernate.criterion.Example.getEntityMode(Example.java:234)
   at org.hibernate.criterion.Example.toSqlString(Example.java:164)
   at org.hibernate.loader.criteria.CriteriaQueryTranslator.getWhereCondition(CriteriaQueryTranslator.java:314)
   at org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:92)
   at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1303)
   at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:300)
   at br.ufpe.liber.theses.dao.hibernate.HibernatePeopleDao$1.doInHibernate(HibernatePeopleDao.java:93)
   at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:312)
   at org.springframework.orm.hibernate3.HibernateTemplate.executeFind(HibernateTemplate.java:292)
   at br.ufpe.liber.dao.hibernate.CallbackExecutor.executeFind(CallbackExecutor.java:48)
   at br.ufpe.liber.theses.dao.hibernate.HibernatePeopleDao.find(HibernatePeopleDao.java:100)
   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:585)
   at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:288)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:155)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:122)
   at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:57)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
   at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:174)
   at $Proxy25.find(Unknown Source)
   at br.ufpe.liber.theses.test.dao.PeopleDAOTest.testFind(PeopleDAOTest.java:70)
   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:585)
   at junit.framework.TestCase.runTest(TestCase.java:154)
   at junit.framework.TestCase.runBare(TestCase.java:127)
   at junit.framework.TestResult$1.protect(TestResult.java:106)
   at junit.framework.TestResult.runProtected(TestResult.java:124)
   at junit.framework.TestResult.run(TestResult.java:109)
   at junit.framework.TestCase.run(TestCase.java:118)
   at junit.framework.TestSuite.runTest(TestSuite.java:208)
   at junit.framework.TestSuite.run(TestSuite.java:203)
   at junit.framework.TestSuite.runTest(TestSuite.java:208)
   at junit.framework.TestSuite.run(TestSuite.java:203)
   at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478)
   at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344)
   at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)

Name and version of the database you are using:MySQL 4.0.24, for Win32
Someone has a idea about what is going on?

best regards

_________________
Marcos Silva Pereira
http://blastemica.blogspot.com


Top
 Profile  
 
 Post subject:
PostPosted: Thu Jun 30, 2005 4:05 pm 
Regular
Regular

Joined: Thu Jul 08, 2004 1:21 pm
Posts: 68
Location: Recife - Pernambuco - Brazil
Ok, sorry, I solve this. I was creating a People object seting String fields to "" and so, hibernate include this on query. Moreover, components could not be inserteds in a qbe, hibernate do it automatically.

valeuz...

_________________
Marcos Silva Pereira
http://blastemica.blogspot.com


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.