Hallo Zusammen 
Ich bin an einem Plug-In- Framework dran. Ich will Hibernate-Klassen dynamisch erzeugen, in einen "tbl"-Ordner packen und vom Class-Loader laden lassen. So weit so gut, klappt alles.
Eine der Klassen lade ich mit
[JAVA=42]public static Class<? extends DTPRecord> loadClass(String path, String classname)
throws Exception {
URL url = new File( path ).toURI().toURL();
@SuppressWarnings("resource")
URLClassLoader cl = new URLClassLoader( new URL[]{ url } );
@SuppressWarnings("unchecked")
Class<? extends DTPRecord> c = (Class<? extends DTPRecord>) cl.loadClass( classname );
return c;
}
[/code]
Hier dazu der Aufruf zum laden:
[Java=42]
DTPRecord clazz2 = null;
Class <? extends DTPRecord> dtp_rec_user = HibernateTable.loadClass("tbls", "DT_User");
try {
clazz2 = dtp_rec_user.newInstance();
} catch (Exception e1) {
e1.printStackTrace();
}
[/code]
und dann versuche ich hier die Id zu setzen:
[JAVA=42]
try {
@SuppressWarnings("unchecked")
DTPRecord dtp = clazz2;
Class[] methodParameters = new Class[]{Integer.TYPE};
Object[] params = new Object[]{new Integer(1)};
Method method = dtp_rec_user.getDeclaredMethod("setId", methodParameters);
method.invoke(clazz2, params);
clazz2.insert();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
[/code]
Leider bekomme ich dann folgende Fehlermeldung:
org.hibernate.AssertionFailure: PersistentClass name cannot be converted into a Class
org.hibernate.cfg.BinderHelper.getPropertyOverriddenByMapperOrMapsId(BinderHelper.java:681)
org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1992)
org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:796)
org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:707)
org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:4035)
org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3989)
org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1398)
org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1856)
Grüße Jaxon
Ich bin an einem Plug-In- Framework dran. Ich will Hibernate-Klassen dynamisch erzeugen, in einen "tbl"-Ordner packen und vom Class-Loader laden lassen. So weit so gut, klappt alles.
Eine der Klassen lade ich mit
[JAVA=42]public static Class<? extends DTPRecord> loadClass(String path, String classname)
throws Exception {
URL url = new File( path ).toURI().toURL();
@SuppressWarnings("resource")
URLClassLoader cl = new URLClassLoader( new URL[]{ url } );
@SuppressWarnings("unchecked")
Class<? extends DTPRecord> c = (Class<? extends DTPRecord>) cl.loadClass( classname );
return c;
}
[/code]
Hier dazu der Aufruf zum laden:
[Java=42]
DTPRecord clazz2 = null;
Class <? extends DTPRecord> dtp_rec_user = HibernateTable.loadClass("tbls", "DT_User");
try {
clazz2 = dtp_rec_user.newInstance();
} catch (Exception e1) {
e1.printStackTrace();
}
[/code]
und dann versuche ich hier die Id zu setzen:
[JAVA=42]
try {
@SuppressWarnings("unchecked")
DTPRecord dtp = clazz2;
Class[] methodParameters = new Class[]{Integer.TYPE};
Object[] params = new Object[]{new Integer(1)};
Method method = dtp_rec_user.getDeclaredMethod("setId", methodParameters);
method.invoke(clazz2, params);
clazz2.insert();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
[/code]
Leider bekomme ich dann folgende Fehlermeldung:
org.hibernate.AssertionFailure: PersistentClass name cannot be converted into a Class
org.hibernate.cfg.BinderHelper.getPropertyOverriddenByMapperOrMapsId(BinderHelper.java:681)
org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1992)
org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:796)
org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:707)
org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:4035)
org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3989)
org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1398)
org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1856)
Grüße Jaxon