Foros del Web » Programación para mayores de 30 ;) » Java »

Agragar mappings automaticamente en Hibernate

Estas en el tema de Agragar mappings automaticamente en Hibernate en el foro de Java en Foros del Web. Hola a todos, quería saber si hay alguna manera (desde hibernate) para agregar todas las clases con annotation Entity en el AnnotationConfiguration automáticamente. Para ser ...
  #1 (permalink)  
Antiguo 10/12/2009, 08:31
 
Fecha de Ingreso: agosto-2007
Mensajes: 14
Antigüedad: 16 años, 9 meses
Puntos: 0
Agragar mappings automaticamente en Hibernate

Hola a todos, quería saber si hay alguna manera (desde hibernate) para agregar todas las clases con annotation Entity en el AnnotationConfiguration automáticamente.

Para ser más preciso, dentro de la estructura de directorios tengo el package modelo, ahí hay clases persistentes y no persistentes, la idea es que cada vez que un modelo pase a ser persistente no haya que agregarlo manualmente en el hibernate.cfg.xml sino que busque dentro del directorio y los agregue automáticamente.

Muchas gracias.

Matias
  #2 (permalink)  
Antiguo 10/12/2009, 11:14
 
Fecha de Ingreso: agosto-2007
Mensajes: 14
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Agragar mappings automaticamente en Hibernate

Una aclaración, esto lo pude hacer de la siguiente manera, pero quiero saber si hibernate me provee alguna manera más sencilla de hacerlo.

Código:
       public static void init() {
		if (sessionFactory == null)
			try {
				List<Class<?>> clasesPersistentes = obtenerClasesPersistentes();

				AnnotationConfiguration cfg = new AnnotationConfiguration().configure();
				for (Class<?> clasePersistente : clasesPersistentes) {
					cfg.addAnnotatedClass(clasePersistente);
				}
				SchemaExport se = new SchemaExport(cfg);
				se.create(true, true);
				sessionFactory = cfg.buildSessionFactory();
			} catch (Exception e) {
				throw new ExceptionInInitializerError();
			}
	}

private static List<Class<?>> obtenerClasesPersistentes() throws IOException,
			ClassNotFoundException {
		Enumeration<URL> modelos = Thread.currentThread().getContextClassLoader().getResources(
				DIR_MODELO);
		List<File> dirs = new ArrayList<File>();
		while (modelos.hasMoreElements()) {
			URL resource = modelos.nextElement();
			dirs.add(new File(resource.getFile()));
		}
		String packModelo = DIR_MODELO.replace("/", ".");
		ArrayList<Class<?>> clases = new ArrayList<Class<?>>();
		for (File directorio : dirs) {
			clases.addAll(obtenerClases(directorio, packModelo));
		}
		LinkedList<Class<?>> clasesPersistentes = new LinkedList<Class<?>>();
		for (Class<?> clase : clases)
			for (Annotation ann : clase.getAnnotations())
				if (ann instanceof Entity)
					clasesPersistentes.add(clase);
		return clasesPersistentes;
	}

private static List<Class<?>> obtenerClases(File directorio, String packageName)
			throws ClassNotFoundException {
		List<Class<?>> clases = new ArrayList<Class<?>>();
		if (!directorio.exists())
			return clases;

		File[] archivos = directorio.listFiles();
		for (File archivo : archivos) {
			// Agrego todas las clases recursivamente.
			if (archivo.isDirectory()) {
				clases.addAll(obtenerClases(archivo, packageName + "." + archivo.getName()));
			} else if (archivo.getName().endsWith(".class")) {
				clases.add(Class.forName(packageName + '.'
						+ archivo.getName().substring(0, archivo.getName().length() - 6)));
			}
		}
		return clases;
	}
Saludos y gracias.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:18.