# Plug-In-Framework für Hibernate-Klassen



## jaxonlost (27. Dez 2013)

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


----------

