Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[Hibernate 2.1] one-to-one : ClassCastException

2 réponses
Avatar
cpuaud
j'ai besoin d'une relation one-to-one entre deux beans. J'ai l'erreur
suivante alors qu'il me semble bien avoir 2 BigDecimal :
Caused by: java.lang.ClassCastException: java.lang.String
at net.sf.hibernate.type.BigDecimalType.set(BigDecimalType.java:33)
at
net.sf.hibernate.type.NullableType.nullSafeSet(NullableType.java:48)
at
net.sf.hibernate.type.NullableType.nullSafeSet(NullableType.java:35)
at
net.sf.hibernate.loader.Loader.bindPositionalParameters(Loader.java:749)
at
net.sf.hibernate.loader.Loader.prepareQueryStatement(Loader.java:788)
at net.sf.hibernate.loader.Loader.doQuery(Loader.java:265)
at
net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:133)
at net.sf.hibernate.loader.Loader.loadEntity(Loader.java:911)
at net.sf.hibernate.loader.Loader.loadEntity(Loader.java:931)
at net.sf.hibernate.loader.EntityLoader.load(EntityLoader.java:59)
at net.sf.hibernate.loader.EntityLoader.load(EntityLoader.java:51)
at
net.sf.hibernate.persister.EntityPersister.load(EntityPersister.java:419)
at net.sf.hibernate.impl.SessionImpl.doLoad(SessionImpl.java:2117)
at
net.sf.hibernate.impl.SessionImpl.doLoadByClass(SessionImpl.java:1991)
at
net.sf.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:1953)
at
net.sf.hibernate.type.OneToOneType.resolveIdentifier(OneToOneType.java:71)
Bean1.java :
/**
* @hibernate.one-to-one
* foreign-key="TYPDO"
* type="java.math.BigDecimal"
*
*/
public Bean2 getTypeDossier() {
return m_typeDossier;
}

public void setTypeDossier(Bean2 typDo) {
this.m_typeDossier = typDo;
}
Bean2.java :
/**
* @hibernate.id
* generator-class="assigned"
* column="TYPDO"
* type="java.math.BigDecimal"
* length="2"
*
*/
public BigDecimal getTypDo() {
return m_typDo;
}

public void setTypDo(BigDecimal typDo) {
this.m_typDo = typDo;
}

Bean1.hbm.xml :
<one-to-one
name="typeDossier"

class="fr.paris.du.pyramid4.commons.bean.gerco.GercoTypeDossierBean"
cascade="none"
outer-join="auto"
foreign-key="TYPDO"
/>

Bean2.hbm.xml :
<id
name="typDo"
column="TYPDO"
type="java.math.BigDecimal"
length="2"
>

2 réponses

Avatar
TestMan
Bonjour,

Ça fait un bail que j'ai pas fait du hibernate mais ton attribut "type"
me parrait étrange, car il me semble pas necessaire de stocker dans
Bean1 le type de la clé encommun avec Bean2 car elle correspond à la clé
primaire de Bean2.

En plus, j'ai un doute sur le type indiqué qui est une classe et pas le
type de mapping (correspondance entre le la couche de persistence et le
bean).

Regarde les exemples de 1-1 sur la doc, et essaye de corriger celà.

Pour rappel, dans un outil de mapping afin d'éviter tout problème il n'y
a généralement pas d'information redondante.

A+

TM

wrote:
j'ai besoin d'une relation one-to-one entre deux beans. J'ai l'erreur
suivante alors qu'il me semble bien avoir 2 BigDecimal :
Caused by: java.lang.ClassCastException: java.lang.String
at net.sf.hibernate.type.BigDecimalType.set(BigDecimalType.java:33)
at
net.sf.hibernate.type.NullableType.nullSafeSet(NullableType.java:48)
at
net.sf.hibernate.type.NullableType.nullSafeSet(NullableType.java:35)
at
net.sf.hibernate.loader.Loader.bindPositionalParameters(Loader.java:749)
at
net.sf.hibernate.loader.Loader.prepareQueryStatement(Loader.java:788)
at net.sf.hibernate.loader.Loader.doQuery(Loader.java:265)
at
net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:133)
at net.sf.hibernate.loader.Loader.loadEntity(Loader.java:911)
at net.sf.hibernate.loader.Loader.loadEntity(Loader.java:931)
at net.sf.hibernate.loader.EntityLoader.load(EntityLoader.java:59)
at net.sf.hibernate.loader.EntityLoader.load(EntityLoader.java:51)
at
net.sf.hibernate.persister.EntityPersister.load(EntityPersister.java:419)
at net.sf.hibernate.impl.SessionImpl.doLoad(SessionImpl.java:2117)
at
net.sf.hibernate.impl.SessionImpl.doLoadByClass(SessionImpl.java:1991)
at
net.sf.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:1953)
at
net.sf.hibernate.type.OneToOneType.resolveIdentifier(OneToOneType.java:71)
Bean1.java :
/**
* @hibernate.one-to-one
* foreign-key="TYPDO"
* type="java.math.BigDecimal"
*
*/
public Bean2 getTypeDossier() {
return m_typeDossier;
}

public void setTypeDossier(Bean2 typDo) {
this.m_typeDossier = typDo;
}
Bean2.java :
/**
* @hibernate.id
* generator-class="assigned"
* column="TYPDO"
* type="java.math.BigDecimal"
* length="2"
*
*/
public BigDecimal getTypDo() {
return m_typDo;
}

public void setTypDo(BigDecimal typDo) {
this.m_typDo = typDo;
}

Bean1.hbm.xml :
<one-to-one
name="typeDossier"

class="fr.paris.du.pyramid4.commons.bean.gerco.GercoTypeDossierBean"
cascade="none"
outer-join="auto"
foreign-key="TYPDO"
/>

Bean2.hbm.xml :
<id
name="typDo"
column="TYPDO"
type="java.math.BigDecimal"
length="2"






Avatar
cpuaud
en fait "type" je l'ai ajouter pour essayer de forcer le passage en
BigDecimal.
Il y a une erreur dans mon code :
Bean1.hbm.xml :
<one-to-one
name="typeDossier"

class="Bean2"
cascade="none"
outer-join="auto"
foreign-key="TYPDO"
/>

D'habitude je génère le sbean mais là ça ne donne pas grand chose
(pas de clé dans la base !)