Загрузка нескольких аннотированных классов в Hibernate
Я использую спящие аннотации и для этого в hibernate.cfg.xml
мне нужно добавить аннотированные классы, как это <mapping class="p.Customer" />
здесь p - имя пакета, а Customer - аннотированный компонент.
Предположим, у меня есть 20 таких аннотированных классов, это означает, что мне нужно написать 20 строк отображения для этого класса. В Spring есть свойство packageToScan
это может быть использовано для регистрации / загрузки всех аннотируемых классов гибернации в указанном пакете.
Поскольку я не использую Spring, можем ли мы иметь такую же функциональность в Hibernate?
Также я нашел один тег в hibernate.cfg.xml
<mapping package="" />
Сначала я думал, что это сделает работу за меня, но это не сработало. Я не понял, какова польза от этого свойства.
2 ответа
Волшебство парсинга аннотаций делается при создании фабрики сессий. Hibernate может сделать это без весны. Spring на самом деле просто оборачивает спящий функционал.
Пожалуйста, посмотрите на эту статью: http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/
Они показывают, как регистрировать классы в фабрике сессий, поэтому используются аннотации. Они действительно не обеспечивают функциональность сканирования, но вы можете реализовать его самостоятельно или лучше использовать другой пакет. Я использовал пакет "отражения" для аналогичной цели. Я имею в виду, что я просканировал свой путь к классам, чтобы найти классы в соответствии с моими критериями, используя пакет отражений. Я не использовал его для спящего режима, но я уверен, что это возможно.
Вот ссылка, которая может вам помочь. http://code.google.com/p/reflections/
1, см.: Как получить все имена классов в пакете?
2, расширить org.hibernate.cfg.Configuration
`
package com.hw.configuration;
import com.hw.util.ClassFinder;
import org.hibernate.MappingException;
import org.hibernate.cfg.Configuration;
import java.util.List;
/**
* Created by whuanghkl on 17/5/31.
*/
public class WildCardConfiguration extends Configuration {
@Override
public Configuration addPackage(String packageName) throws MappingException {
List<Class<?>> classes = ClassFinder.find(packageName);
int size=classes.size();
for (int i=0;i<size;i++){
super.addAnnotatedClass(classes.get(i));
}
return this;
}
}
`
3, `
new SchemaExport(new
WildCardConfiguration().configure()).create(true, false);
`