-->
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.  [ 11 posts ] 
Author Message
 Post subject: java.lang.ClassCastException: java.lang.String
PostPosted: Wed Sep 07, 2005 10:02 am 
Beginner
Beginner

Joined: Thu Aug 11, 2005 11:16 am
Posts: 20
hi,

i have a ClassCastException (string) when i do that :

property = BasepropertyDAO.getInstance().getpropertyByName("rouge",false);

if (property.getParam_name().toString().equals("rouge")) {

Apparament le paramName de la table property retourner n'est pas correct ! effectivement car il ne devrait pas me retourner de property car la property rouge n existe pas ! il me renvoi qqlchose mais pas null et pas une string . Help me !!

Merci d'avance ,


Exception in thread "main" java.lang.ClassCastException: java.lang.String
at org.hibernate.type.IntegerType.set(IntegerType.java:39)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:62)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:44)
at org.hibernate.loader.Loader.bindPositionalParameters(Loader.java:1115)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1177)
at org.hibernate.loader.Loader.doQuery(Loader.java:390)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:218)
at org.hibernate.loader.Loader.loadEntity(Loader.java:1345)
at org.hibernate.loader.entity.EntityLoader.load(EntityLoader.java:116)
at org.hibernate.loader.entity.EntityLoader.load(EntityLoader.java:101)
at org.hibernate.persister.entity.BasicEntityPersister.load(BasicEntityPersister.java:2471)
at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:351)
at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:332)
at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:113)
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:75)
at org.hibernate.impl.SessionImpl.immediateLoad(SessionImpl.java:643)
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:59)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:84)
at org.hibernate.proxy.CGLIBLazyInitializer.intercept(CGLIBLazyInitializer.java:134)
at model.AC_param$$EnhancerByCGLIB$$d94ceb45.getParam_name(<generated>)
at fr.ill.ics.server.instrumentmanagement.DBBridgeManager.CreateOrUpdatePropertiesOfanACinDB(DBBridgeManager.java:235)
at fr.ill.ics.server.instrumentmanagement.DBBridgeManager.instantiateECs(DBBridgeManager.java:78)
at fr.ill.ics.server.instrumentmanagement.DBBridgeManager.<init>(DBBridgeManager.java:48)
at fr.ill.ics.server.instrumentmanagement.DBBridgeManager.GetInstance(DBBridgeManager.java:37)
at controller.MainDBManager.main(MainDBManager.java:68)

_________________
Cyril,


Top
 Profile  
 
 Post subject:
PostPosted: Wed Sep 07, 2005 10:41 am 
Pro
Pro

Joined: Fri Sep 02, 2005 4:21 am
Posts: 206
Location: Vienna
Salut,

Ce serait très "gentil" si tu pouvais fournir quelques informations supplémentaires - comme le code de getpropertyByName et des quelques objets utilisés.

Je pense que la cause de ton erreur est très simple à diagnostiquer - dès qu'on a les informations utiles...

Erik


Top
 Profile  
 
 Post subject:
PostPosted: Wed Sep 07, 2005 10:59 am 
Beginner
Beginner

Joined: Thu Aug 11, 2005 11:16 am
Posts: 20
ok sorry , it 's :

public Property getPropertyByName(String param_name, boolean lock)

throws InfrastructureException {



Session session = HibernateUtil.getSession();

Property prop = null;

try {

if (lock) {

prop = (Property) session.load(Property.class, param_name, LockMode.UPGRADE);

} else {

prop = (Property) session.load(Property.class, param_name);

}

} catch (HibernateException ex) {

throw new InfrastructureException(ex);

}

return prop;
}



Donc je lui passe le param_name "rouge" et s'il existe dans une table property me retrouve un pointeur sur cette table pour comparer si table property.getpropertyname = rouge est == a la property que je cherche si c le cas je cree pas la table, mais le pblm c'est que la property rouge n existe pas donc il devrait me retourner null ! pour que je comprenne qu'il faille que je cree la table mais me retourne qqlchose de bizzard qui est pas une string pour paramname car qd je veu l'afficher il me fais un classcastexception.
Je c pas si je suis claire mais merci en tous cas !

En faite c simple si vs avez une autre solution pour regarder si une table est deja cree et si un element de cette table existe deja ou s'il faut l'inserer ???

bonne soireee

Peut etre parce que dans ma recherche le param_name n'est pas un identifiant ?

_________________
Cyril,


Top
 Profile  
 
 Post subject:
PostPosted: Wed Sep 07, 2005 1:20 pm 
Pro
Pro

Joined: Fri Sep 02, 2005 4:21 am
Posts: 206
Location: Vienna
Salut,

cyr2005 wrote:
Peut etre parce que dans ma recherche le param_name n'est pas un identifiant ?

C'est bien mon impression. D'après la trace de l'exception je crois que l'id est un Integer ou un int - malheureusement il me manque encore quelques informations pour en être tout à fait sûr.

Si tu ne vois toujours pas ton erreur, poste le mapping de la classe Property STP.

Erik


Top
 Profile  
 
 Post subject:
PostPosted: Thu Sep 08, 2005 3:14 am 
Beginner
Beginner

Joined: Thu Aug 11, 2005 11:16 am
Posts: 20
Ben en faite qd je fais une recherche avec l'identifiant sa marche oui c un int mais si je veu faire une recherche sur un attribut de la table qui n'est pas identifiant comme le param_name est bien sa ne marche pas ! est ce normal en faite ? faut il tjs faire recherch sur identifiant ? et si on connais pas l'identifiant ? comment faire une requete SQL qui avec le nom nous retourne l'id ? j ai ma ptite idee la dessus mais comment faire une requete generique en faite !! je veux que ma requete fasse une recherche avec le nom que je lui passe en parametre d'une methode je peux pas me permettre de faire une requete pas param_name different !
SQLQuery q = HibernateUtil.getSession().createSQLQuery(
"select property_id from PROPERTY as prop WHERE param_name = name-in-param-to-find-id );

Est ce possible une requete de ce type ??

Je sais c'est bcp de question !!!! Merci bcp d'avance ,


<hibernate-mapping>

<class name="model.Property" table="PROPERTY">

<id name="property_id" type="integer">
<column name="property_id" sql-type="int"/>
<generator class="sequence">
</generator>
</id>

<one-to-one name="ac_id" class="model.AC"/>


<property name="param_name" type="string">
<column name="param_name" sql-type="varchar2(50)" not-null="true"/>
</property>

</class>

</hibernate-mapping>

_________________
Cyril,


Top
 Profile  
 
 Post subject:
PostPosted: Thu Sep 08, 2005 5:12 am 
Newbie

Joined: Wed Sep 07, 2005 5:54 am
Posts: 16
Location: Chambéry
Bonjour,

Si tu as un ClassCastException lorsque tu effectues l'instruction suivante "prop = (Property) session.load(Property.class, param_name, LockMode.UPGRADE)", c'est parceque Hibernate s'attend à ce que tu lui fournisses en paramètre de la méthode load un Objet et un Serializable id. Or param_name n'est pas ton id, d'où ClassCastException. Il s'attend à avoir un int/Integer alors que tu lui fournit un String.


Top
 Profile  
 
 Post subject:
PostPosted: Thu Sep 08, 2005 5:12 am 
Newbie

Joined: Wed Sep 07, 2005 5:54 am
Posts: 16
Location: Chambéry
Bonjour,

Si tu as un ClassCastException lorsque tu effectues l'instruction suivante "prop = (Property) session.load(Property.class, param_name, LockMode.UPGRADE)", c'est parceque Hibernate s'attend à ce que tu lui fournisses en paramètre de la méthode load un Objet et un Serializable id. Or param_name n'est pas ton id, d'où ClassCastException. Il s'attend à avoir un int/Integer alors que tu lui fournit un String.


Xavier


Top
 Profile  
 
 Post subject:
PostPosted: Thu Sep 08, 2005 5:14 am 
Pro
Pro

Joined: Fri Sep 02, 2005 4:21 am
Posts: 206
Location: Vienna
J'ai l'impression que tu devrais lire la documentation plus en détail et/ou t'acheter une livre sur Hibernate.

Tes questions sont vraiment le B A BA de Hibernate et SQL.

Tu peux bien sûr faire une recherche sur un attribut qui n'est pas l'id - mais pas avec load. Pour cela il faut écrire une requête avec un paramètre.

Example:
SQLQuery q = HibernateUtil.getSession().createQuery(
"FROM Property prop WHERE prop.param_name = ?");
q.setString(0, param);
Property prop = (Property) q.uniqueResult();

Note que je n'ai pas testé ce code - il se peut qu'il contienne des erreurs de frappe - mais l'intention y est.

J'espère que cela t'aide dans l'immédiat - mais je répète: lis la doc, sinon tu vas tomber sur le nez à tout bout de champ.

Erik


Top
 Profile  
 
 Post subject:
PostPosted: Thu Sep 08, 2005 5:14 am 
Beginner
Beginner

Joined: Thu Aug 11, 2005 11:16 am
Posts: 20
ok oui c'est se qu'il me semblait sa marche qd je lui passe un int , mon identifiant mais si je le connais pas comment faire ? comment faire une recherche avec le nom comme je le demande plus haut ?
merci,

_________________
Cyril,


Top
 Profile  
 
 Post subject:
PostPosted: Thu Sep 08, 2005 5:16 am 
Beginner
Beginner

Joined: Thu Aug 11, 2005 11:16 am
Posts: 20
ah ok MERCI j avais pas vu le poste de ErikFK ! merci je devrais trouver et ok je lirais la donc alors !! sa t vaut un credit sa tiens !!

_________________
Cyril,


Top
 Profile  
 
 Post subject:
PostPosted: Thu Sep 08, 2005 5:21 am 
Newbie

Joined: Wed Sep 07, 2005 5:54 am
Posts: 16
Location: Chambéry
Dans ton cas il te serait intéressant de faire une query pour récupérer ton objet.

Query myQuery = session.createQuery("From Property as p Where p.param_name = 'rouge'");
myObject = myQuery.uniqueResult();

Au détail pret, voici un exemple pour récupérer ton objet.

Bon courage, Xavier


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 11 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.