Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用Hibernate加载整个数据库_Java_Hibernate_Memory_Sqlite_Eager - Fatal编程技术网

Java 用Hibernate加载整个数据库

Java 用Hibernate加载整个数据库,java,hibernate,memory,sqlite,eager,Java,Hibernate,Memory,Sqlite,Eager,我正在使用SQLite3和Hibernate与Java。我是否可以将整个数据库加载到内存中,或者从数据库中获取所有数据,以便以最快的速度访问映射对象?例如,如果我们有一个Company和Employee类,并且在Company中,我们将员工映射为Company.getEmployees()。我希望从数据库中获取所有公司,稍后调用此方法时,我希望立即获取员工。那么有没有办法预加载它们?此外,如果employee映射到其他对象,我也可以预加载它们吗?总之,我想加载整个数据库并使用ORM访问数据。谢谢

我正在使用SQLite3和Hibernate与Java。我是否可以将整个数据库加载到内存中,或者从数据库中获取所有数据,以便以最快的速度访问映射对象?例如,如果我们有一个Company和Employee类,并且在Company中,我们将员工映射为Company.getEmployees()。我希望从数据库中获取所有公司,稍后调用此方法时,我希望立即获取员工。那么有没有办法预加载它们?此外,如果employee映射到其他对象,我也可以预加载它们吗?总之,我想加载整个数据库并使用ORM访问数据。谢谢

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

public class Company{

private List<Employee> employeeList;

@ManyToMany(fetch = FetchType.EAGER)
public List<Employee> getEmployeeList() {
        return employeeList;
    }
}
上市公司{
私人名单雇员名单;
@ManyToMany(fetch=FetchType.EAGER)
公共列表getEmployeeList(){
返回员工名单;
}
}

这将在您从数据库检索公司时自动获取所有员工。请注意,这可能会极大地影响性能。

如果您的目标只是提高性能,那么您有几个选择:

  • 配置Hibernate第二级
  • 除了前一点之外,如果您的数据变化不大,请进行配置
  • 在嵌入式模式下使用SQL数据库代替SQLite或内存中的SQL数据库
  • 与大型共享文件夹一起使用。符合JPA的OODB
  • 使用MongoDB。一个非常快速的内存NoSQL解决方案
如果不需要使用SQL,我建议使用ObjectDB


(编辑:删除了即时抓取,添加了查询缓存。)

您确定这不会在每次我调用getEmployeeList时发出请求吗?只要它是同一个对象,就完全可以。只是好奇,你为什么要这么做?看一看,使用内存中的数据库似乎是一种更好的方法,因为我的数据库很小(~3MB),我使用其中存储的每一位数据。谢谢没问题!请接受这个问题,如果你考虑它,我认为他会更好地通过实施第一步。尽管我同意其余的说法,但如果太费劲,配置一个好的缓存会很好。