Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 休眠配置-会话工厂扫描?_Java_Hibernate_Orm_Hibernate.cfg.xml - Fatal编程技术网

Java 休眠配置-会话工厂扫描?

Java 休眠配置-会话工厂扫描?,java,hibernate,orm,hibernate.cfg.xml,Java,Hibernate,Orm,Hibernate.cfg.xml,我们有一个hibernate.cfg.xml文件。有没有办法告诉Hibernate只扫描一个目录,而不必在这里为每个类添加一个条目 <hibernate-configuration> <session-factory> <mapping class="com.abc.domain.model.A" /> <mapping class="com.abc.domain.model.B" /> <mappi

我们有一个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>

那怎么办

<mapping assembly="SomeAssemblyName" />

那怎么办

<mapping assembly="SomeAssemblyName" />

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返回包含所有域对象的程序集的名称,以及正确的映射。然后,添加此项,即添加程序集,无需对域类型重复此过程。

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返回包含所有域对象的程序集的名称,以及正确的映射。然后,添加这个程序集,您就可以添加程序集,并且不需要对域类型重复这个过程。

要获得发现机制,您需要使用实现Java持久性标准发现机制的Hibernate EntityManager。否则,您需要列出您的类

要获得发现机制,需要使用Hibernate EntityManager,它实现Java持久性标准发现机制。否则,您需要列出您的类

Tapestry使用一个实用程序类来实现这一点,该实用程序类检查类路径以找到包含所有Hibernate注释类的包,然后检查磁盘上的文件以获得类名。如果您可以将它们全部放在一个包中(或者愿意编写更复杂的类路径实用程序),那么可以找到它们,然后调用configuration.addAnnotatedClass(cls)。这里有一些警告,例如,您不能太喜欢外部jar、使用自定义加载程序加载的类等等,但是对于标准情况,它可以很好地工作


您可以在这里查看Tapestry是如何实现的:尽管这可能会引入其他Tapestry特定的类。

Tapestry使用一个实用程序类来实现这一点,该实用程序类检查类路径以查找包含所有Hibernate注释类的包,然后检查磁盘上的文件以获取类名。如果您可以将它们全部放在一个包中(或者愿意编写更复杂的类路径实用程序),那么可以找到它们,然后调用configuration.addAnnotatedClass(cls)。这里有一些警告,例如,您不能太喜欢外部jar、使用自定义加载程序加载的类等等,但是对于标准情况,它可以很好地工作


您可以在这里查看Tapestry是如何实现的:尽管这可能会引入其他特定于Tapestry的类。

我正在寻找类似的解决方案,并从另一个解决方案中找到了答案。 您应该使用spring来实现这一点

  • 创建一个类EntityScannerSessionFactoryBean扩展AnnotationSessionFactoryBean
  • 从链接中复制代码(这是一个很好的答案,请务必阅读)。为你的新班级干杯
  • 在应用程序上下文中添加以下命令以将该类映射为sessionFactory。 bean id=“sessionFactory”class=“com.foo.EntityScannerSessionFactoryBean”>


  • 我正在寻找一个类似的解决方案,并从另一个方面找到了答案。 您应该使用spring来实现这一点

  • 创建一个类EntityScannerSessionFactoryBean扩展AnnotationSessionFactoryBean
  • 从链接中复制代码(这是一个很好的答案,请务必阅读)。为你的新班级干杯
  • 在应用程序上下文中添加以下命令以将该类映射为sessionFactory。 bean id=“sessionFactory”class=“com.foo.EntityScannerSessionFactoryBean”>


  • 现在还不清楚您在这里谈论的是Java Hibernate还是.NET NHibernate。。。我猜nhibernate标签是不正确的?不清楚您在这里谈论的是Java Hibernate还是.NET nhibernate。。。我猜nhibernate标签不正确?