Problem mit EMF/Teneo, GregorianCalendar, Date, Hibernate Timestamp

krazun

Bekanntes Mitglied
Schönen guten Tag,

ich arbeite mich grade in EMF/Teneo ein und habe folgendes Problem:

Ich habe in einem EMF Modell einige EAttribute die bis jetzt vom Typ java.util.date waren in java.util.calendar geändert. Da ich in Java mit java.util.GregorianCalendar arbeite möchte ich mir das hin und her konvertieren ersparen.

Ich habe also einen EDataType hinzugefügt mit dem instance class name: java.util.Calendar und in den Objekten wo ich vorher folgenden EType benutz habe: EDate [java.util.Date], nutze ich nun: Calendar [java.util.Calendar].

Ich habe das genmodel aktualisiert und den model-code neu generieren lassen. Im *.model.impl package wurden die entsprechenden Klassen auch wie gewollt von date auf calendar aktualisiert.
Auch habe ich sämtliche Tabellen gelöscht und von Hibernate neu anlegen lassen, nach dem aktualisieren des genmodel.

Allerdings bekomme ich nun bei dem Versuch die Objekte mit session.save(component) zu persistieren folgende Exception:

Java:
Exception in thread "main" java.lang.ClassCastException: java.util.GregorianCalendar cannot be cast to java.util.Date
    at org.hibernate.type.TimestampType.deepCopyNotNull(TimestampType.java:89)
    at org.hibernate.type.MutableType.deepCopy(MutableType.java:48)
    at org.hibernate.type.TypeFactory.deepCopy(TypeFactory.java:397)
    at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:303)
    at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
    at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
    at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
    at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
    at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:562)
    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:550)
    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:546)

Für mich sieht das so aus als ob Hibernate nun versuchen würde Calendar-Werte als Timestamp zu nutzen, obwohl ich an den Hibernate/Teneo Einstellungen nichts verändert habe. An den vom EMF generierten Klassen habe ich auch keine manuellen Veränderungen durchgeführt (Keine Annotation geändert oder ähnliches).

Die Initialisierung von Hibernate/Teneo wurde vorher und nacher wie folgt durchgeführt:

Java:
public void initDataStore() {

        Properties hibernateProperties = new Properties();
        hibernateProperties.setProperty(Environment.DRIVER, "com.microsoft.sqlserver.jdbc.SQLServerDriver");
        hibernateProperties.setProperty(Environment.USER, "user");
        hibernateProperties.setProperty(Environment.PASS, "pass");
        hibernateProperties.setProperty(Environment.URL, "jdbc:sqlserver://127.0.0.1\\SQLEXPRESS;DatabaseName=database");
        hibernateProperties.setProperty(Environment.DIALECT, SQLServerDialect.class.getName());
        hibernateProperties.setProperty(PersistenceOptions.CASCADE_POLICY_ON_NON_CONTAINMENT, "REFRESH,PERSIST,MERGE");
        hibernateProperties.setProperty(PersistenceOptions.INHERITANCE_MAPPING, "JOINED");
        
        final String dataStoreName = "datastore";
        final HbDataStore dataStore = HbHelper.INSTANCE.createRegisterDataStore(dataStoreName);
        dataStore.setProperties(hibernateProperties);
        dataStore.setEPackages(new EPackage[] { ModelPackage.eINSTANCE });
        try {
            dataStore.initialize();
        } catch (Exception ex) {
            System.err.println(dataStore.getMappingXML());
            ex.printStackTrace();
        }
        sessionFactory = dataStore.getSessionFactory();
        
    }

Hatte vielleicht schonmal jemand ein ähnliches Problem oder eine Idee woran das liegen könnte ?

mfg,
krazun
 

diel2001

Bekanntes Mitglied
Gibt es keine Möglichkeit einfach die getDate() methode in dem Calendar aufzurufen ??
Dann bekommst du nämlich ein DateObject zurück
 
S

SlaterB

Gast
ändere das schleunigst wieder in Date zurück, Hibernate versteht nur begrenzt viele Standard-Klassen,
du würdest ja auch nicht einen StringBuilder an Stelle eines Strings mappen
 

krazun

Bekanntes Mitglied
Gibt es keine Möglichkeit einfach die getDate() methode in dem Calendar aufzurufen ??
Dann bekommst du nämlich ein DateObject zurück


Ich denke wenn ich für mein Problem keine Lösung finde werd ich es so machen müssen ;)

Ich arbeite dann in Java mit Calendar, persistiere als Date und konvertiere immer mit calendar.setTime(Date), calendar.getTime() hin und her.

Funktionieren tut es schon, ich hätte es nur schöner gefunden durchgängig mit Calendar zu arbeiten ;)

mfg,
krazun
 

krazun

Bekanntes Mitglied
ändere das schleunigst wieder in Date zurück, Hibernate versteht nur begrenzt viele Standard-Klassen,
du würdest ja auch nicht einen StringBuilder an Stelle eines Strings mappen

Allerdings hat man bei EMF doch die Möglichkeit beliebige Klassen als EDataType zu benutzen.

In dem Artikel "Eclipse Modeling Framework (EMF) - Tutorial " von Lars Vogel (Eclipse Modeling Framework (EMF) - Tutorial) wird ebenfalls Calendar als eigener Datentyp definiert:

model90.png


Ich hab bis jetzt noch nirgens gelesen das Teneo nur die vorgegeben ETypes persistieren kann und keine EDataTypes. Ich hab angenommen das mit Calendar dann ebenso umgegangen wird als wenn ich eine beliebige selbst erstellte Klasse persistiere.

Ich werd nochmal schauen ob ich in der Teneo Dokumentation etwas übersehen hab.

Ich mag es ja auf einer hohen Abstraktionsebene zu arbeiten mit EMF/Teneo. Man kann so wirklich verdammt schnell komplexe Modelle entwickeln, in Java Code umsetzen lassen und persistieren. Aber bei der Fehlersuche kann das echt anstrengend werden, wenn man sich noch nicht wirklich tiefgehend eingearbeitet hat ;)

mfg,
krazun
 

Wildcard

Top Contributor
Du kannst einfach ein derived (und transient und volatile) Feature vom Typ Calendar in deinem Modell erstellen. Du musst dann die entsprechende get Methode implementieren und einfach dort dein Date in einen Calendar umwandeln. Da dieses Feature transient ist (also nicht serialisiert wird) stört sich Hibernate nicht an diesem Typ.
 

krazun

Bekanntes Mitglied
Du kannst einfach ein derived (und transient und volatile) Feature vom Typ Calendar in deinem Modell erstellen. Du musst dann die entsprechende get Methode implementieren und einfach dort dein Date in einen Calendar umwandeln. Da dieses Feature transient ist (also nicht serialisiert wird) stört sich Hibernate nicht an diesem Typ.

Vielen Dank für den Tipp! Ich werde gleich versuchen das so Umzusetzen.

mfg,
krazun
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K EMF/Teneo EMap Problem Plattformprogrammierung 6
K Problem bei Einbinden einer DLL in Java-Projekt Plattformprogrammierung 4
Wurstsemmel RCP SWT-Problem: Programm sucht Cocoa-Bibliothek unter Windows Plattformprogrammierung 6
Shams Antbuild - Problem bei OSGi Anfängertutorial Plattformprogrammierung 0
D Problem mit eclipse Plattformprogrammierung 2
J JNA Implimentierungs Problem Plattformprogrammierung 0
Shams Problem bei der Knopflerfischinstallation Plattformprogrammierung 2
J Charset-Problem nach Plugin-Export Plattformprogrammierung 1
TheWhiteShadow RCP Problem mit Plugin Interaktion Plattformprogrammierung 6
D Eclipse_Visual Editor Problem Plattformprogrammierung 2
J Eclipse Plug-In für UML-Diagramme Problem Plattformprogrammierung 4
O Eclipse Plugin - Einfachstes Problem, das es gibt. Plattformprogrammierung 2
dzim OSGi Problem beim Verwenden von Declaratice Services Plattformprogrammierung 18
T netbeans problem? Plattformprogrammierung 4
dzim RCP Problem mit MenuManager Plattformprogrammierung 3
H RCP Problem mit Extension Schema Plattformprogrammierung 10
R JFace Databinding Problem Plattformprogrammierung 5
F Ecilpse plugin und MWE Workflow: classpath Problem Plattformprogrammierung 12
W Wahrscheinlich triviales Problem, aber komm nicht weiter Plattformprogrammierung 7
K SelectionListener / SelectionProvider Problem Plattformprogrammierung 2
M Xpand Anfäger Problem Plattformprogrammierung 3
K Eclipse RCP, EMF, Hibernate Problem Plattformprogrammierung 7
dzim RCP Problem mit Umsetzen des Workspace unter Win Plattformprogrammierung 4
B PreferencesService Problem Plattformprogrammierung 2
L RCP TreeViewer Listener Problem Plattformprogrammierung 12
C target platform problem Plattformprogrammierung 2
K NoClassDefFoundError Problem Plattformprogrammierung 24
F Eclipse: Plug-In mit Ecoding Problem Plattformprogrammierung 7
O Problem mit relativen Pfaden in einem RCP-Plugin Plattformprogrammierung 5
dzim Problem beim neuanlegen von Composites Plattformprogrammierung 4
hdi Problem bei Eclipse Plugin Export Plattformprogrammierung 9
K Bild Problem in exportierter RCP Anwendung Plattformprogrammierung 5
M Problem beim Zugriff auf Klasse aus Fragment in einem anderen Plugin Plattformprogrammierung 3
D Problem mit Synth Painter und OSGi (Equinox) Plattformprogrammierung 8
G plugin.xml Problem Plattformprogrammierung 4
I SWT Popup-Menu Problem (Position) Plattformprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben