将两个类映射到Hibernate中的一个DB表

时间:2016-06-06 12:39:26

标签: java hibernate

我有2个Class1.java和Class2.java。两者都映射到类表。

@Entity
@Table(name = "Class")
public class Class1 {
 String name;
}

@Entity
@Table(name = "Class")
public class Class2 {
  String name;
}

现在当我的sessionfactory被创建时,这两个类都将被扫描,两者都会消耗内存。

但是在我的应用程序启动时,我们在运行时决定通过查看数据库在整个应用程序中使用Class1.java或Class2.java。

所以我希望hibernate使用类Class1.java或Class2.java中的任何一个,这样我就可以节省内存。请帮助解决这个问题。

1 个答案:

答案 0 :(得分:0)

我们可以通过以下方式完成。

我们正在使用Spring,因此使用了通过注释创建bean的概念,即JavaConfig。

例如。

@Configuration
public class BeanFactory {

@Bean(name = "sessionFactory")
public LocalSessionFactoryBean sessionFactory() {
    LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
    sessionFactory.setDataSource(dataSource); // datasource injected using @Autowire
    Connection connection = null;
    Statement statement = null;
    ResultSet resultSet = null;
    String[] packageToScan = new String[] {"your package"};
    try {
        Class.forName("com.mysql.jdbc.Driver");
        connection = DriverManager.getConnection("", "", "");
        statement = connection.createStatement();
        resultSet = statement.executeQuery("query to get packagetoscan property.");
        if (resultSet.next()){
            packageToScan[0] = resultSet.getString(1);
        }
    }catch (Exception e){
        e.printStackTrace();
    }
    sessionFactory.setPackagesToScan(packageToScan);
    sessionFactory.setHibernateProperties(hibernateProperties()); // hibernateProperties() method will return properties.
    return sessionFactory;
}

所以这样我们可以在数据库中更改packagetoscan属性,当我们的应用程序启动时,它将从数据库中获取此属性,我们可以节省内存。