我有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中的任何一个,这样我就可以节省内存。请帮助解决这个问题。
答案 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属性,当我们的应用程序启动时,它将从数据库中获取此属性,我们可以节省内存。