jpql“加入获取” vs EntityGraph

时间:2019-05-30 22:49:35

标签: hibernate jpa

我想通过使用jpql或jpa实体图来加载相关实体。

似乎两者都做同样的事情。

为什么我应该使用实体图而不是普通的 jpql ?有什么好处吗?

使用jpql有什么区别:

select distinct u from User u join fetch u.hobbies a join fetch a.tasks

或实体图:

@NamedEntityGraph(name = "User.eagerfetch", attributeNodes = { 
        @NamedAttributeNode("hobbies"),
        @NamedAttributeNode("tasks")})

1 个答案:

答案 0 :(得分:0)

差异是代码的专业成熟度。

使用NamedEntityGraphs,其清晰度和可读性,可维护性和代码质量明显更好。

EntityGraph在编译时进行评估,并且与Entity定义紧密相关,因此不易出错。对Entity类的任何更改都会破坏Graph的定义,从而使代码甚至不会像查询字符串那样编译出这些错误。手写查询是黑客解决方案。更不用说所有实体定义都在一个地方。在@Entity类中并不是全部。