查询父实体集合总是只返回子实体的 1 个元素

问题描述 投票:0回答:0

我有以下实体:

@Entity
@Table(name = "request")
@NoArgsConstructor
@Getter
@Setter
@Component
public class Request {

    @Id
    @Column(name = "id", columnDefinition = "varchar(64)")
    private String id;

    ... 
    
    @OneToMany(mappedBy="request")
    private Set<RequestError> error;
    ...

@Entity
@Table(name = "edepot_request_error")
@Data
@NoArgsConstructor
public class RequestError implements Serializable {

    @Id
    @SequenceGenerator(name = "request_error_id_seq", sequenceName =            "request_error_id_seq", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "request_error_id_seq")

    @JoinColumn(name="idempotencykey")
    private String idempotencyKey;

   @ManyToOne(targetEntity=Request.class)
   private Request request;

   ...

当尝试进行查询时,例如:

EntityManager entityManager = emf.createEntityManager();
        //EntityGraph entityGraph = entityManager.getEntityGraph("request-entity-graph");

        String requestSql= "SELECT req FROM Request req";

        List<Request> qryResultRequests = entityManager.createQuery(requestSql, Request.class)
                .getResultList();

我总是得到正确的父记录集合,但我总是得到 1 个错误的子集合(当子表包含父项的多个错误时)。 我确实在论坛上搜索了多个问题,并且尝试了一些建议:

  • 使用实体图
  • 使用左连接获取,如 [https://vladmihalcea.com/the-best-way-to-map-a-onetomany-association-with-jpa-and-hibernate/] 中所述(映射一对多关联)
  • 使用 mappedBy,移除 mappedBy

返回的父母集合是正确的,尽管

List<Request>
始终只包含给定父母的孩子集合中的1个错误(应该包含多个错误)。

错误表和请求表在我们的应用程序中彼此独立填写,查询只是一个选择(读取)查询,用于在控制台中获取请求记录以及为请求生成的错误。 这个想法是通过父实体加载子实体 我错过了什么或 Ì 做错了什么?

hibernate jpa parent-child one-to-many
© www.soinside.com 2019 - 2024. All rights reserved.