Java 使用EJB';s/JPA

Java 使用EJB';s/JPA,java,jpa,ejb,Java,Jpa,Ejb,我有一个疑问,我希望有人能给我一些光。通常,我使用JSF和EJB/JPA进行项目,因此,当ai需要从数据库中获取一些数据并进行过滤时,我有两种方法: 将查询的参数发送到sql存储过程,执行一些查询并重新检索结果 或 获取所有数据的列表,并根据某些条件创建一些函数,用于接收实体列表和检索反筛选列表 比如: //on managed bean ... List<Person> listPersons = personFacade.findAll(); return filterBy

我有一个疑问,我希望有人能给我一些光。通常,我使用JSF和EJB/JPA进行项目,因此,当ai需要从数据库中获取一些数据并进行过滤时,我有两种方法:

  • 将查询的参数发送到sql存储过程,执行一些查询并重新检索结果

  • 获取所有数据的列表,并根据某些条件创建一些函数,用于接收实体列表和检索反筛选列表

比如:

//on managed bean
...
List<Person> listPersons = personFacade.findAll();

return filterByName(filterByAge(filterBySomething(listPersons )));
//在托管bean上
...
List listPersons=personFacade.findAll();
返回filterByName(filterByAge(filterBySomething(listPersons));
对我来说,使用第二种方法更容易,但我不确定这是否是最好的方法。

通常,您使用Java持久性查询语言定义“过滤器”,让JPA容器完成它的工作

JPQL被转换为SQL,因此数据库正在进行工作,并且只有经过过滤的实体bean返回到应用程序的EJB层

相反,如果以后对它们进行筛选,则必须首先将整个数据库表加载到内存中。因此,将为每个记录创建一个实体bean,但很快就会将其丢弃,因为它已从列表中筛选出来