tmagus
Legacy Member
Ik heb dus een probleemke
Ik probeer dus een Enum klasse geslacht te mappen met hibernate, het wegschrijven van de enum lukt me dus wel maar het terug ophalen loopt dus altijd mis.
Na wat opzoek werk bleek dus da ge best zelf een Type maakt, nu ik heb gebruikt gemaakt van bestaande code: http://www.hibernate.org/272.html
Waarbij het wegschrijven terug perfect lukt maar het ophalen deze Error geeft:
Mijn enum Klasse Geslacht:
Stuk van mapping file:
Ik weet dus nie echt wat er misloopt... of dat er mss een ander makkelijker manier is om een enum opteslaan en terug te halen via mapping van hibernate, heb ook al gevonden dat annotations blijkbaar daar wel een type voor hebben vb daar van is "@Enumerated(value=EnumType.STRING)" bestaat er dan zoietske voor gewone mapping file's ook? want ik vin het nie direct terug?
Of een oplossing voor mijn bovenstaand probleem is ook altijd welkom,
alvast bedankt
Ik probeer dus een Enum klasse geslacht te mappen met hibernate, het wegschrijven van de enum lukt me dus wel maar het terug ophalen loopt dus altijd mis.
Na wat opzoek werk bleek dus da ge best zelf een Type maakt, nu ik heb gebruikt gemaakt van bestaande code: http://www.hibernate.org/272.html
Waarbij het wegschrijven terug perfect lukt maar het ophalen deze Error geeft:
Code:
org.hibernate.HibernateException: Exception while invoking valueOf method 'fromInt' of enumeration class 'class edu.fregusoft.utilities.Geslacht'
at edu.fregusoft.utilities.hibernate.GenericEnumUserType.nullSafeGet(GenericEnumUserType.java:137)
at org.hibernate.type.CustomType.nullSafeGet(CustomType.java:105)
at org.hibernate.type.AbstractType.hydrate(AbstractType.java:81)
at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2096)
at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1380)
at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1308)
at org.hibernate.loader.Loader.getRow(Loader.java:1206)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:580)
at org.hibernate.loader.Loader.doQuery(Loader.java:701)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.doList(Loader.java:2220)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
at org.hibernate.loader.Loader.list(Loader.java:2099)
at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
at org.hibernate.impl.CriteriaImpl.uniqueResult(CriteriaImpl.java:305)
at edu.fregusoft.persistentie.hibernate.GenericHibernateDAO.findByProperty(GenericHibernateDAO.java:115)
at edu.fregusoft.persistentie.dao.GebruikerDAO.getUserByUsername(GebruikerDAO.java:20)
at edu.fregusoft.services.GebruikerService.getUserByUsername(GebruikerService.java:69)
at edu.fregusoft.persistentie.hibernate.servlet.CreateDB.doGet(CreateDB.java:56)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at edu.fregusoft.persistentie.hibernate.filter.OpenSession.doFilter(OpenSession.java:80)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalArgumentException: object is not an instance of declaring class
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at edu.fregusoft.utilities.hibernate.GenericEnumUserType.nullSafeGet(GenericEnumUserType.java:135)
... 37 more
Mijn enum Klasse Geslacht:
Code:
package edu.fregusoft.utilities;
/**
* Deze klasse is een enumerator voor het geslacht van een persoon: M(annelijk) of V(rouwelijk).
* @author FreGuSoft
* @since 20071109
*/
public enum Geslacht {
U(-1), M(0), V(1);
int value;
private Geslacht(int value) {
this.value = value;
}
public int toInt()
{
return value;
}
public Geslacht fromInt(int value)
{
switch(value)
{
case 0: return M;
case 1: return V;
default: return U;
}
}
Stuk van mapping file:
Code:
<hibernate-mapping default-cascade="all"
package="edu.fregusoft.domein.contactenbeheer">
<typedef name="EnumGeslacht" class="edu.fregusoft.utilities.hibernate.GenericEnumUserType">
<param name="enumClass">edu.fregusoft.utilities.Geslacht</param>
<param name="identifierMethod">toInt</param>
<param name="valueOfMethod">fromInt</param>
</typedef>
<class name="Persoon" abstract="true">
<id name="id" column="persoonID" type="long">
<generator class="native" />
</id>
<property name="naam" column="NAAM" type="string" />
<property name="voornaam" column="VOORNAAM" type="string" />
<property name="geboortedatum" column="GEBOORTEDATUM"
type="calendar_date" />
<property name="geslacht" column="GESLACHT" type="EnumGeslacht"/>
Ik weet dus nie echt wat er misloopt... of dat er mss een ander makkelijker manier is om een enum opteslaan en terug te halen via mapping van hibernate, heb ook al gevonden dat annotations blijkbaar daar wel een type voor hebben vb daar van is "@Enumerated(value=EnumType.STRING)" bestaat er dan zoietske voor gewone mapping file's ook? want ik vin het nie direct terug?
Of een oplossing voor mijn bovenstaand probleem is ook altijd welkom,
alvast bedankt


was gewoon vlugge copy paste