首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >春季数据Rest中的NamedEntityGraph忽略

春季数据Rest中的NamedEntityGraph忽略
EN

Stack Overflow用户
提问于 2018-06-04 11:17:22
回答 1查看 590关注 0票数 0

我有一个存储库,它的findAll方法被标记为@EntityGraph。我正在将生成的SQL打印到日志中,我可以看到,当直接在Java (即myRepo.findAll();)中使用时,它会生成正确的连接选择。但当我通过REST将其称为“REST”时,这种情况不会发生。我要么得到例外,公元前。延迟加载代理不能序列化,或者如果我添加jackson-5,我可以看到更多的查询。

我尝试在这里生成一个最小的复制:https://github.com/cptwunderlich/SpringDataRestDemo

我看不到附加的查询,也没有例外,所以我怀疑实体已经在缓存中了,但是它发出一个没有联接的选择。

这里摘录了代码(用lombok生成的getters/setters/等等,为了简洁起见省略了一些样板!):

实体:

代码语言:javascript
复制
@Entity
@Data
@NoArgsConstructor(force = true)
public class Bar {
  @Id @GeneratedValue
  private Long id;

  private String value;

  @Version
  private Long version;
}

@Entity
@NamedEntityGraph(name = "Foo.full", includeAllAttributes = true)
@Data
@NoArgsConstructor(force = true)
@EqualsAndHashCode(of = {"name"})
public class Foo {
  @Id @GeneratedValue
  private Long id;

  private String name;

  @ManyToOne(fetch = LAZY, cascade = CascadeType.ALL)
  @NonNull
  private Bar bar;

  @Version
  private Long version;
}

储存库:

代码语言:javascript
复制
@RestResource
public interface FooRepository extends JpaRepository<Foo, Long> {

  @EntityGraph(value = "Foo.full", type = EntityGraphType.LOAD)
  @Override
  List<Foo> findAll();
}

为findAll生成的查询:

代码语言:javascript
复制
select
    foo0_.id as id1_1_0_,
    bar1_.id as id1_0_1_,
    foo0_.bar_id as bar_id4_1_0_,
    foo0_.name as name2_1_0_,
    foo0_.version as version3_1_0_,
    bar1_.value as value2_0_1_,
    bar1_.version as version3_0_1_ 
from
    foo foo0_ 
left outer join
    bar bar1_ 
        on foo0_.bar_id=bar1_.id

REST查询:

代码语言:javascript
复制
select
    foo0_.id as id1_1_,
    foo0_.bar_id as bar_id4_1_,
    foo0_.name as name2_1_,
    foo0_.version as version3_1_ 
from
    foo foo0_ limit ?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-04 11:34:11

天哪,我才想出来的。我想是一种橡胶鸭子的调试。

当我发布这篇文章时,我注意到了“限制?”子句在第二个查询中。我手动添加了@Query和countQuery,但没有看到任何变化。然后我明白了-- limit的论点从何而来?

这只是一种不同的方法:

代码语言:javascript
复制
  @EntityGraph(attributePaths = {"bar"})
  @Override
  List<Foo> findAll();

  @EntityGraph(attributePaths = {"bar"})
  @Override
  Page<Foo> findAll(Pageable pageable);

第二个来自PagingAndSortingRepository

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50679356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档