当前位置: 首页 > 知识库问答 >
问题:

Spring数据JPA/Hibernate处理关联

那弘
2023-03-14

我需要基于参数从实体中检索或不检索一些关联。在下面的示例中,只有在通过api传递参数时,我才需要获取记录列表。你能推荐一种使用hibernate/spring数据实现这一点的方法吗?我正在寻找最干净、最像spring数据的方法。

public class Customer {
  private UUID id;

  @OneToMany(mappedBy = "customer")

  private List<Record> records = new ArrayList<>();
}

public class Record {
    private UUID id;

    @Column(name = "customer_id", length = 36, columnDefinition = "varchar(36)", nullable = false)
    private UUID customerId;
    
    @JoinColumn(name = "customer_id", insertable = false, updatable = false)
    private Customer customer;
}

我的存储库是空的:

public interface CustomerRepository extends JpaRepository<Customer, UUID> {

}

在我的服务中,我做了如下事情:

Customer customer = customerRepository.findById(customerId).orElseThrow(() -> new CustomerNotFoundException("customerId", customerId));

但我想做的是:

if (showRecords) {
    Customer customer = customerRepository.findById(customerId).orElseThrow(() -> new CustomerNotFoundException("customerId", customerId));
} else {
    Customer customer = customerRepository.findByIdWithoutAssociations(customerId).orElseThrow(() -> new CustomerNotFoundException("customerId", customerId));
}

共有1个答案

彭雨华
2023-03-14

使用基本的findById只返回客户对象,使用另一个方法findWithRecordsById使用@EntityGraph返回客户记录怎么样?

public interface CustomerRepository extends JpaRepository<Customer, UUID>{

    @EntityGraph(attributePaths = {"records"})
    Customer findWithRecordsById(UUID id);
...
}
 类似资料:
  • 问题内容: 按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 到目前为止,我有一个具有持久性的Spring应用程序。但是现在我想将Hibernate与JPA一起使用来完成我的所有数据库活动。我想使用一个entitymana

  • 问题内容: 我有一个Spring + Hibernate + JPA应用程序。用户登录时,可以从要连接的数据库列表中进行选择(这是要求)。所有数据库都有相同的架构,因此将使用相同的实体和DAO。 现在,我有一个EntityManager(目前正在使用一个数据库),它被注入到DAO中,如下所示: 有什么方法可以让DAO根据从服务层接收到的参数/属性自动接收entityManager(由Spring管

  • 我对Spring和冬眠是新的。我有一个使用Spring、Hibernate和PostgreSQL的项目。我知道我可以使用Spring Data JPA或Hibernate查询数据库,但我不知道每种方法的优点和缺点是什么。我还知道在后台,Spring Data JPA会调用Hibernate。那么我应该使用什么最佳方式来查询数据库以获得最佳性能,Spring数据JPA或Hibernate或取决于具体

  • 我无法解决这个问题。我得到了“线程中的异常”main”org.hibernate.LazyInitializationException:未能延迟初始化角色集合:org.sandy.domain.Location.items,没有会话或会话被关闭”我知道会话已关闭,但tx: notionation-drive@Transactional应该确保打开会话。它可以很好地与EAGER获取一起工作。哦,是

  • 我有一个使用JPA的Spring Boot应用程序,它有一个PostgreSQL数据库。我使用的是Spring Batch。场景是我正在读取一个文件并将数据写入PostgreSQL数据库。当程序在数据库中创建Spring Batch使用的元数据表时,它与PostgreSQL一起工作。但我需要的是Spring Boot不要创建元数据表,并通过Spring Batch使用内存中基于映射的作业存储库。我

  • 我使用JPA和Hibernate作为容器管理事务的提供者(JBossAS 6.1.0.Final)。 我正在尝试实现一些细粒度的异常处理,因为我的应用程序上有一个特定的异常层次结构,所以我可以定义在任何情况下要做什么。因此,我已经研究了几个小时,发现文档很模糊,示例也有些原始,因为“为了清晰起见”总是忽略异常处理,或者是一个简单的try-catch块,用于处理异常e。 例如,采用以下代码: cat