使用Hibernate加载整个数据库

时间:2012-12-13 14:59:46

标签: java hibernate memory sqlite eager

我正在使用SQLite3和Hibernate与Java。我可以以某种方式将整个数据库加载到内存中或从数据库中获取所有数据,以便我可以最快地访问映射对象吗?例如,如果我们有公司和员工类,并且在公司中,我们将Employees映射为company.getEmployees()。我想从数据库中取出所有公司,之后当我打电话给这种方法时,我想立即让员工。那么有没有办法预加载它们?此外,如果员工被映射到其他对象,我也可以预加载它们吗?总而言之,我想加载整个数据库并使用ORM来访问数据。谢谢!

2 个答案:

答案 0 :(得分:2)

如果您的目标只是表现出色,那么您有几个选择:

  • 配置Hibernate第二级cache
  • 除了先前的观点,如果您的数据变化不大,请配置query cache
  • 而不是SQLite在嵌入模式下使用HSQLDBH2内存中的SQL数据库
  • ObjectDB与大型共享cache一起使用。符合JPA标准的OODB。
  • 使用MongoDB。内存非常快的NoSQL解决方案

如果您不需要使用SQL,我建议使用ObjectDB。

(编辑:删除了急切的提取,添加了查询缓存。)

答案 1 :(得分:0)

将实体类中的所有关系设置为急切。如果您使用的是JPA注释:

public class Company{

private List<Employee> employeeList;

@ManyToMany(fetch = FetchType.EAGER)
public List<Employee> getEmployeeList() {
        return employeeList;
    }
}

当您从数据库中检索公司时,这将自动获取所有员工。请注意,这可能会显着影响性能。