我们有这个hibernate.cfg.xml文件。有没有办法告诉Hibernate只扫描目录而不必为每个类添加一个条目?
<hibernate-configuration>
<session-factory>
<mapping class="com.abc.domain.model.A" />
<mapping class="com.abc.domain.model.B" />
<mapping class="com.abc.domain.model.C" />
<mapping class="com.abc.domain.model.D" />
<mapping class="com.abc.domain.model.E" />
</session-factory>
</hibernate-configuration>
答案 0 :(得分:3)
要获得发现机制,您需要使用Hibernate EntityManager来实现Java Persistence标准发现机制。否则你需要列出你的课程。
答案 1 :(得分:2)
怎么样?
<mapping assembly="SomeAssemblyName" />
答案 2 :(得分:1)
我正在寻找类似的解决方案,并从另一个question here找到答案。 你应该使用spring来完成这项工作。
bean id =“sessionFactory”class =“com.foo.EntityScannerSessionFactoryBean”&gt;
答案 3 :(得分:0)
NHibernate的最佳做法是在构建ISessionFactory API之前仅向配置中添加一个程序集。
罗伯特确实用元素指出了它。另一种方法是按如下方式执行运行时配置:
Configuration cfg = new Configuration();
cfg.AddAssembly(typeof(OneOfYourDomainType).Assembly.Name); // Or something like that by memory.
cfg.Configure();
static ISessionFactory sessionFactory = cfg.BuildSessionFactory();
使ISessionFactory静态很重要,因为实例化非常昂贵。
typeof(OneOfYourDomainType).Assembly.Name返回包含所有域对象的程序集的名称,并使用正确的映射。然后,添加它,添加程序集,您不需要一次又一次地为您的域类型重复该过程。
答案 4 :(得分:0)
Tapestry使用实用程序类执行此操作,该实用程序类检查类路径以查找包含所有Hibernate注释类的包,然后检查磁盘上的文件以获取类名。如果你把它们全部放在一个包中(或者愿意编写一个更复杂的类路径实用程序),你可以找到它们,然后调用configuration.addAnnotatedClass(cls)。有一些警告,例如,你不能太喜欢外部罐子,加载自定义加载器的类等,但对于标准情况,它工作正常。
你可以看看Tapestry在这里做了什么:http://www.java2s.com/Open-Source/Java-Document/Library/Tapestry/org/apache/tapestry/internal/services/ClassNameLocatorImpl.java.htm虽然这可能会引入其他Tapestry特定的类。