如何从hibernate.cfg文件中删除映射资源属性

时间:2010-06-05 05:28:51

标签: hibernate hibernate-mapping

我目前正在开展一个项目。在我的项目中有许多实体/ POJO文件。目前我使用简单的hibernate.cfg.xml将所有映射文件添加到配置中,如: -

<mapping resource="xml/ClassRoom.hbm.xml"/>
<mapping resource="xml/Teacher.hbm.xml"/>
<mapping resource="xml/Student.hbm.xml"/>

我有大量的映射文件,这使我的hibernate.cfg文件看起来有点乱,所以有什么办法让我不需要将上面的内容添加到hibernate.cfg文件中。相反,可以有任何其他方式来实现相同的...请帮助

4 个答案:

答案 0 :(得分:1)

您可以以编程方式创建Configuration并使用Configuration#addClass(Class)指定映射的类(Hibernate将为您加载映射文件)。来自javadoc:

  

使用类的约定将映射作为应用程序资源读取   名为foo.bar.Foo的文件由文件foo/bar/Foo.hbm.xml映射   可以解析为类路径资源。

所以你可以这样做:

Configuration cfg = new Configuration()
    .addClass(org.hibernate.auction.Item.class)
    .addClass(org.hibernate.auction.Bid.class)
    ...
    .configure();
SessionFactory factory = cfg.buildSessionFactory();

另见

答案 1 :(得分:0)

是的,use annotations

@Entity
public class Teacher {

    @Column
    private String name;

    @Column
    private String address;

    etc..
}

Hibernate将自动检测使用@Entity注释的类。

答案 2 :(得分:0)

Hibernate Configuration类本身不提供神奇的addAllEntities方法。但您可以使用AnnotationSessionFactoryBean setPackagesToScan方法。请记住,它只是在使用带注释的Entity类时才有效,它是一个Spring依赖类

AnnotationSessionFactoryBean sessionFactory = new AnnotationSessionFactoryBean();

sessionFactory.setDataSource(<javax.sql.DataSource> implementation goes here)
sessionFactory.setPackagesToScan(new String [] {"xml"});

答案 3 :(得分:0)

Configuration的addDirectory()/ addJar()方法使用在指定目录/ JAR-File中找到的所有.hbm.xml文件。你需要硬编码那个位置,但只需要那个