java - Hibernate 映射包

标签 java hibernate hibernate-annotations

我正在使用 Hibernate 注释。

在我的所有模型类中,我都这样注释:

@Entity
@Table
public class SomeModelClass {
//
}

我的hibernate.cfg.xml是

<hibernate-configuration>
   <session-factory>
      <!-- some properties -->

      <mapping package="com.fooPackage" />
      <mapping class="com.fooPackage.SomeModelClass" />
    </session-factory>
</hibernate-configuration>

对于我添加到 com.fooPackage 的每个类,我必须在 hibernate.cfg.xml 中添加一行,如下所示:

<mapping class="com.fooPackage.AnotherModelClass" />

有没有办法可以添加新的模型类但不需要将此行添加到 hibernate.cfg.xml?

最佳答案

开箱即用 - 不。但是,您可以编写自己的代码来检测/注册带注释的类。如果您使用的是 Spring,则可以扩展 AnnotationSessionFactoryBean 并执行以下操作:

@Override
protected SessionFactory buildSessionFactory() throws Exception {
  ArrayList<Class> classes = new ArrayList<Class>();

  // the following will detect all classes that are annotated as @Entity
  ClassPathScanningCandidateComponentProvider scanner =
    new ClassPathScanningCandidateComponentProvider(false);
  scanner.addIncludeFilter(new AnnotationTypeFilter(Entity.class));

  // only register classes within "com.fooPackage" package
  for (BeanDefinition bd : scanner.findCandidateComponents("com.fooPackage")) {
    String name = bd.getBeanClassName();
    try {
      classes.add(Class.forName(name));
    } catch (Exception E) {
      // TODO: handle exception - couldn't load class in question
    }
  } // for

  // register detected classes with AnnotationSessionFactoryBean
  setAnnotatedClasses(classes.toArray(new Class[classes.size()]));
  return super.buildSessionFactory();
}

如果你没有使用 Spring(你应该是:-))你可以编写你自己的代码来检测适当的类,并通过 addAnnotatedClass()< 在你的 AnnotationConfiguration 中注册它们 方法。

顺便说一句,除非您实际上在包级别声明了某些内容,否则没有必要映射包。

关于java - Hibernate 映射包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1413190/

相关文章:

java - 在java gradle项目中创建firebase admin sdk项目时出现日志记录问题

java - 使用 toArray 将列表转换为数组

java - JPA - 如果不存在则创建实体?

java - 使用 @ManyToOne 和 @OneToMany 会导致 org.hibernate.exception.GenericJDBCException

java - 当我从 Java 打开 CMD 时,无法更改目录

java - 将 Java 后台进程输出重定向到/dev/null - 这是个好主意吗?

java - Hibernate:从 3.6.9 迁移到 4.2

spring - Hibernate 与 Spring 的集成在 hippo cms 站点项目中不起作用

java - 映射仅由不带 @IdClass 或 @EmbeddedId 的复合 PK 组成的类

java - 从用户注册中检查数据库中的唯一值约束