本文介绍了Hibernate配置不会列出XML中的所有实体的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
目前在我的 hibernate.cfg.xml 文件中,我必须列出每个单独的实体作为映射类,以便我的Hibernate选取实体,否则我得到一个错误,如引用一个未知实体
。
所以我有大约20个这样的行:
< mapping class =my.com.entity.User>< / mapping>
< mapping class =my.com.entity.Address>< / mapping>
...
不必每次都在XML文件中添加新行一个新的实体被创建,有没有办法告诉Hibernate嘿,只需从my.com.entity包中取出所有的东西作为一个实体?
解决方案
没有。即使使用最后一个Hibernate 5版本,你也不能说Hibernate会扫描持久化类的包。
使用Spring
使用Spring的常见方式如@Srini所示。
< bean id =sessionFactoryclass =org.springframework.orm.hibernate5.LocalSessionFactoryBean>
< property name =packagesToScan>
< list>
<值> my.com.entities< /值>
<值> my.com.other.entities< /值>
< / list>
< / property>
< / bean>
请注意,取决于Hibernate版本,您需要使用包: org.springframework .orm.hibernate5
, org.springframework.orm.hibernate4
。
使用流利hibernate
如果您不想使用Spring ,你可以使用
库(你不需要有其他的jar,除了库)。除此之外,它还具有Hibernate 5和Hibernate 4的一些有用功能,包括实体扫描,Hibernate 5隐式命名策略,嵌套转换器等。
对于Hibernate 4和Hibernate 5:
Configuration configuration = new Configuration();
EntityScanner.scanPackages(my.com.entities,my.com.other.entities)
.addTo(配置);
SessionFactory sessionFactory = configuration.buildSessionFactory();
使用新的Hibernate 5引导API:
List< Class<?>> classes = EntityScanner
.scanPackages(my.com.entities,my.com.other.entities)。result();
MetadataSources metadataSources = new MetadataSources(); (Class<> annotatedClass:classes){
metadataSources.addAnnotatedClass(annotatedClass);
;
SessionFactory sessionFactory = metadataSources.buildMetadata()
.buildSessionFactory();
使用其他库
如果您已经使用可用于扫描的库,例如,那里是一个测试项目,其中包含使用各种库进行实体扫描的示例: hibernate-scanners-test