有可能不在JPA中获取渴望的关系吗?

时间:2015-06-12 14:47:52

标签: hibernate jpa

我的关系注释如下:

@OneToMany( fetch = FetchType.EAGER )

是否可以在不将默认提取类型更改为延迟的情况下获取此关系? 我问它是因为我改进了现有的应用程序,我不想改变现有的实体及其注释。在我的情况下,我不需要获取这种关系,并且获取它非常耗费电脑,所以我想避免它。 解决它的一种方法是创建没有这种关系的第二个冗余实体。有没有更好的办法?

我使用Hibernate作为持久性提供程序。

2 个答案:

答案 0 :(得分:2)

JPA这样的实现者使用像这样的全局提取计划来创建SQL(以便稍后加载实体,例如,通过Id加载实体,而不是每次在需要时创建SQL)在EntityManagerFactory自助时间 并且还没有任何配置可以覆盖这些全局提取计划。 想到的两个解决方案是

  1. 更改地图 - 强烈推荐,不能过分强调。                  应该始终仔细检查急切的获取计划,并避免充其量。相信我这是经验谈话: - )
  2. 使用条件API - 如@Amit所示 - 但是这意味着 您需要更改代码中的访问模式。如果您的Parent实体与图中的另一个实体相关,并且您只是从Root实体调用getParent,它将加载Parent的相关子项一次性使用(如果使用Hibernate,则使用预构建的连接查询),这将是无用的。无论您需要关联父实体,请将其标记为Lazy并避免使用getter - intead使用Criteria查询。

答案 1 :(得分:1)

我不确定,请尝试在查询中明确指定fetch类型,如下所示:

InputStream in = new FileInputStream(new File("D:\\lbl2\\1 (26).LBL"));
    InputStreamReader inputStreamReader = new InputStreamReader(in);
    System.out.print(inputStreamReader.getEncoding());