Hibernate - ClassCastException

9 respostas
oliveirarenan

Pessoal.

Tenho o seguinte hbm:

<hibernate-mapping>
    <class name="br.com.bvti.ep.model.to.CategoryldfTO" table="TCATEGORYLDF" schema="dbo" catalog="EP5">
        <composite-id name="id" class="br.com.bvti.ep.model.to.CategoryldfIdTO">
            <key-property name="categoryUid" type="long">
                <column name="CATEGORY_UID" />
            </key-property>
            <key-property name="locale" type="string">
                <column name="LOCALE" length="20" />
            </key-property>
        </composite-id>
        <many-to-one name="tcategory" class="br.com.bvti.ep.model.to.CategoryTO" update="false" insert="false" fetch="select">
            <column name="CATEGORY_UID" not-null="true" />
        </many-to-one>
        <property name="url" type="string">
            <column name="URL" />
        </property>
        <property name="keyWords" type="string">
            <column name="KEY_WORDS" />
        </property>
        <property name="description" type="string">
            <column name="DESCRIPTION" />
        </property>
        <property name="title" type="string">
            <column name="TITLE" />
        </property>
        <property name="displayName" type="string">
            <column name="DISPLAY_NAME" not-null="true" />
        </property>
    </class>
</hibernate-mapping>

Não sei como tratar o composite id, visto que eu precisaria do atributo: categoryUid

Mas no meu DAO eu fiz o seguinte select:

public static final String CATEGORY_SELECT_ALL = " select b.displayName from CategoryTO as a, CategoryldfTO as b" +
													 " where b.id.categoryUid = a.uidpk" + 
													 " and a.endDate is null";

E quando tento executar a seguinte excessão é lançada:

java.lang.ClassCastException
	at br.com.bvti.util.service.ServiceBaseImpl.buildTopMenu(ServiceBaseImpl.java:81)
	at br.com.bvti.ep.web.action.HomeAction.perform(HomeAction.java:48)
	at org.apache.struts.action.Action.execute(Action.java:420)
	at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
	at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:697)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
	at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
	at java.lang.Thread.run(Thread.java:534)

Alguem teria alguma solucao q poderia me ajudar?

Abs´s

:D:D:D:D:D

9 Respostas

plentz

Pelo stacktrace, ele não está nem chegando no dao.

Alexandre_Vilas_Boas

Fala ae Renan, blz?

é dia 4 heim…

Conseguiu encontrar o erro?
Da uma olhada no que acontece em ServiceBaseImpl.java:81

abraço

oliveirarenan

Fala grande Alexandre.....se prepare q esta chegando..rsrsrs

Então, o valor agora esta retornando mas esta dando erro de ClassCastException.....

Tipo:
result = dao.findAllCategories();//dao.findAll(CategoryTO.class);
		System.out.println("Resultado ==========&gt&gt&gt&gt "  + result);
		
		CategoryTO category = new CategoryTO();
		 //category = null;
		
		for (int i = 0; i &lt result.size(); i++) {
			category = (CategoryTO)result.get(i);
			
			if(category.getParentId() != null)
			{
			    //Caso o ParentID seja igual à 2260992 (Feminino)
			    if(category.getParentId().intValue() == 2260992)
			     menu.add("oCMenu.makeMenu('sub0" + i + "','top0','" + category.getParentId() + "','listProduct.do?cid=" + category.getUidpk() + "'); ");

			    //Caso o ParentID seja igual à 2260993 (Masculino)
			    if(category.getParentId().intValue() == 2260993)
			     menu.add("oCMenu.makeMenu('sub0" + i + "','top1','" + category.getParentId() + "','listProduct.do?cid=" + category.getUidpk() + "'); ");

			    //Caso o ParentID seja igual à 2260994 (Infantil)
			    if(category.getParentId().intValue() == 2260994)
			     menu.add("oCMenu.makeMenu('sub0" + i + "','top2','" + category.getParentId() + "','listProduct.do?cid=" + category.getUidpk() + "'); ");

			    //Caso o ParentID seja igual à 2260995 (Acessórios)
			    if(category.getParentId().intValue() == 2260995)
			     menu.add("oCMenu.makeMenu('sub0" + i + "','top3','" + category.getParentId() + "','listProduct.do?cid=" + category.getUidpk() + "'); ");
			}
		}

Estou trazendo uns valores do banco e o meu result esta retornanto os valores corretos.

Quando eu faço um cast na minha lista para o tipo do TO, da´q dá a exceção!!!

Alguem sugestao?

Abs´s

:lol: :lol: :lol: :lol: :lol: :lol:

Alexandre_Vilas_Boas

Coloca o código do método findAllCategories aqui.

oliveirarenan

Kra, o select esta retornando os valores corretos, mas em todo caso:

public static final String CATEGORY_SELECT_ALL = " select b.displayName, a.uidpk, a.parentId from CategoryTO as a, CategoryldfTO as b" +
													 " where b.id.categoryUid = a.uidpk" + 
													 " and a.endDate is null";

	/**
	 * Busca as Categorias
	 * @param 
	 * @return List
	 */
	public List findAllCategories() {
		List listCategories = null;
		Query q = HibernateUtil.getSession().createQuery(CATEGORY_SELECT_ALL);
		
		listCategories = (List) q.list();
		return listCategories;
	}
Alexandre_Vilas_Boas

oliveirarenan:
Kra, o select esta retornando os valores corretos, mas em todo caso:

realmente não vi nada de errado aí…

esse

category = (CategoryTO)result.get(i);

é a linha 81 da classe ServiceBaseImpl?

oliveirarenan

é sim…:smiley:

Alexandre_Vilas_Boas

ferrou :smiley:
não consegui enxergar nada

testa se não é null antes de fazer o cast

Object obj = result.get(i); if(obj == null){ //eu já passei por um problema assim }

Eduardo_Bregaida

Vc está tentando passar algo tipo um Object em um outro tipo.
Por isso ta ocasionando o erro… :smiley:
Já aconteceu mto disso comigo rs

Criado 15 de março de 2007
Ultima resposta 16 de mar. de 2007
Respostas 9
Participantes 4