java - Spring JPA 中关系的动态获取

标签 java spring jpa orm relation

我希望能够动态加载实体的关系,具体取决于调用的 RestService。

实体类:

@Entity
public class Order {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    @ManyToOne
    private Buyer buyer;
    // some more attributes
}

@Entity
public class Buyer {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    // some more attributes
}

RestController 类:

@GetMapping
public Iterable<Order> getAll() {
    // here I want JPA to NOT load the buyers for the order
    return orderRepository.findAll();
}

@GetMapping("/{id}")
public Order get(@PathVariable("id") String id) {
    // here I want JPA to load the buyers for the order
    return orderRepository.findById(Long.parseLong(id)).orElseThrow();
}

两种 fetchtypes LAZYEAGER 或 json 注释都没有(例如 @JsonIgnore@JsonIdentityInfo)据我理解和尝试,@JsonManagedReference@JsonBackReference)似乎使这成为可能。

如果这是不可能的,也许有人可以解释如何解决这个问题。一方面,我有时需要在前端中显示这些关系来显示一些值,另一方面,当我总是加载它们时,我会遇到巨大的性能问题或无限递归。

最佳答案

我认为 JPA 不直接支持您的用例。

一种选择是创建同一实体两次 - 一次使用 eager,另一次使用惰性。在方法中切换它们。

另一种选择是使用 DTO(数据传输对象)作为响应,而不是实体类本身。不过,您必须编写映射器逻辑来将实体转换为 DTO。

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

相关文章:

java - 观察者如何订阅 observables?

java - 是否可以从 application.properties 禁用 Spring Boot 的自动异常处理

hibernate - 使用一个实体(及其主键)作为另一个实体的 Id

java - 连接到两个数据库时出现 LazyInitializationException

java - 使用java将数据从mysql数据库复制到其他mysql数据库

java - 未映射的 POJO 在 native 查询的结果异常中用作类类型

java - 更新写入 java 文本文件的对象

java - @Value 在 Spring @Configuration 中不起作用

java - 基准测量方法拦截框架

java - 平方距离的二维随机游走程序