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:
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:
Hatte vielleicht schonmal jemand ein ähnliches Problem oder eine Idee woran das liegen könnte ?
mfg,
krazun
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