java - 如何在Spring Boot中动态获取EntityGraph

原文 标签 java spring jpa spring-data spring-data-jpa

我正在使用JPA使用Spring Boot开发应用程序。
在应用程序中,我将公开一个REST API。我不想使用Spring数据休息,因为我想完全控制数据。

我无法弄清楚如何动态使用EntityGraph。

假设我从here中获取了以下模型

   @Entity
class Product {

  @ManyToMany
  Set<Tag> tags;

  // other properties omitted
}

interface ProductRepository extends Repository<Customer, Long> {

  @EntityGraph(attributePaths = {"tags"})
  Product findOneById(Long id);
}

我有以下休息链接访问产品
http://localhost:8090/product/1

它向我返回ID为1的产品

问题:
  • 默认情况下,是否会像我们提到@EntityGraph那样获取标签
    如果是,那么可以按需配置吗?说,如果在查询中
    我有 include = tags 的字符串,那么只有我想用
    它的标签。

  • 我找到了this文章,但不确定如何提供帮助。

    最佳答案

    Spring Data JPA存储库中的EntityGraph定义是静态的。如果要使其动态化,则需要像链接到的页面那样以编程方式进行此操作:

    EntityGraph<Product> graph = this.em.createEntityGraph(Product.class);
    graph.addAttributeNodes("tags"); //here you can add or not the tags
    
    Map<String, Object> hints = new HashMap<String, Object>();
    hints.put("javax.persistence.loadgraph", graph);
    
    this.em.find(Product.class, orderId, hints);
    

    您还可以在JPA存储库中使用EntityGraph定义方法。
    interface ProductRepository extends Repository<Product, Long> {
    
    @EntityGraph(attributePaths = {"tags"})
    @Query("SELECT p FROM Product p WHERE p.id=:id")
    Product findOneByIdWithEntityGraphTags(@Param("id") Long id);
    }
    

    然后在您的服务中有一个方法,该方法将该方法与EntityGraph或内置的findOne(T id)一起使用,而没有EntityGraph:
    Product findOneById(Long id, boolean withTags){
      if(withTags){
        return productRepository.findOneByIdWithEntityGraphTags(id);
      } else {
        return productRepository.findOne(id);
      }
    }
    

    关于java - 如何在Spring Boot中动态获取EntityGraph,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33957291/

    相关文章:

    java - 使用Java for循环和用户输入来制作自定义菱形

    java - Android-如何更新另一个 Activity 的数据。在你正在工作的那个之外

    java - Java:在类路径上加载和编辑属性文件

    spring - 哪个版本的 Spring AMQP 和 Spring Rabbit 兼容 Spring 5?

    java - 在一个项目/应用程序 Java 中同时运行 Springboot 和 Rest 端点

    java - 从Sonarqube导出编码规则列表

    hibernate - 如何使用 JPA CriteriaBuilder 查询执行外连接?

    java - JPA/hibernate : Joining 2 Entities Multiple Times

    mysql - JPA映射,用于具有用户特定值的一对多共享数据收集

    spring - Tomcat - PermGen 空间异常