我需要基于参数从实体中检索或不检索一些关联。在下面的示例中,只有在通过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));
}
使用基本的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