【问题标题】:JPA and JSF Datatable OptimizationJPA 和 JSF 数据表优化
【发布时间】:2012-06-11 21:46:49
【问题描述】:

我需要一次显示一个包含大约 1300 个角色的大表。 (我知道我应该使用数据滚动,但我的用户希望一次查看整个表格。)该表格显示 4 列。其中两列来自对象,但另外两列来自原始对象中的引用对象。我需要找到最好/有效的方法来做到这一点。我目前有这个工作,但是当我重新加载表时,它会出现内存不足的错误。我认为这是由于内存中的大量冗余数据造成的。

  1. 创建一个视图对象,存储库将只填写所需的字段。
  2. 任何其他建议。

这里是对象:

    public class Database extends EntityObject {
      private Long id;
      private String name;
      private String connectionString;
      private String username; 
      private String password;
      private String description;

      // getter and setters omitted
    }

    public class Application extends EntityObject {
      private Long id;
      private String name;
      private String fullName = "";
      private String description;
      private Database database;
      private List<Role> roles = new ArrayList<Role>(0);

      // getter and setters omitted
    }

    public class Role extends EntityObject {
      private Long id;
      private String name;
      private String nameOnDatabase;
      private Application application;

      // getter and setters omitted
    }

我需要从角色列表中显示的是:

role.id、role.name、role.application.name、role.application.database.name

【问题讨论】:

    标签: jsf optimization jpa datatable


    【解决方案1】:

    要明智地进行优化,请定义您将如何处理数据、查看或/和编辑。以下是一些常见场景

    1. Retrieval using lazy fetch type。 使用 FetchType.LAZY 注释标记您在应用程序中的角色。

    2. Retrieval using multiselect query。创建您的自定义类(如 DTO)并使用多选查询使用数据库中的数据填充它。 (类似于 VIEW 映射为实体)

    还有其他可能性,例如Shared (L2) Entity CacheRetrieval by Refresh

    查看您是否正确使用 EntityManager 阅读 Am I supposed to call EntityManager.clear() often to avoid memory leaks?

    【讨论】:

    • 为什么 OP 想要延迟加载? OP 正在加载 RoleApplicationDatabase
    • Retrieved Role 将加载 Application,它会立即加载 List。由于您正在从数据库中检索所有角色,因此我不确定 hibernate 是否会自动在其持久性上下文中查找已检索到的角色。
    • 据我所知,默认情况下,集合是惰性获取的。
    • @siebz0r 是的,对不起,我的错。然后其他选项仍然存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    相关资源
    最近更新 更多