我想通过使用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")})
答案 0 :(得分:0)
差异是代码的专业成熟度。
使用NamedEntityGraphs,其清晰度和可读性,可维护性和代码质量明显更好。
EntityGraph在编译时进行评估,并且与Entity定义紧密相关,因此不易出错。对Entity类的任何更改都会破坏Graph的定义,从而使代码甚至不会像查询字符串那样编译出这些错误。手写查询是黑客解决方案。更不用说所有实体定义都在一个地方。在@Entity类中并不是全部。