簡體   English   中英

如何將結果集映射到 JPA 中的自定義 POJO

[英]How can I map a result set to custom POJO in JPA

我需要通過加入 3 個不同的表來獲取 6 列。 我已經在實體類的頂部將它們聲明為 NamedNativequery,並且我使用了創建命名查詢方法表單 JPA。 當我嘗試獲取結果集時,我得到的是數組對象列表,而不是 POJO 類型的對象列表。 為了將結果集映射到外部 POJO,是否應該定義任何外部映射?

你當然可以。 這應該有幫助:

@NamedNativeQuery(query = "SELECT t1.col1, t2.col2 FROM t1 JOIN t2 ON ...", name = "MyNamedQuery", resultSetMapping = "MyPojoMapper")
@SqlResultSetMapping(name = "MyPojoMapper", classes = @ConstructorResult(
    targetClass = MyPojo.class,
    columns = {
            @ColumnResult(name = "col1", type = String.class),
            @ColumnResult(name = "cols", type = String.class)
    }))

然后像這樣使用它:

NativeQuery query = session.getNamedNativeQuery("MyNamedQuery");
MyPojo result = (MyPojo) query.getSingleResult();

您可以使用投影來指定要獲取的屬性
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#projections

或直接使用 JPQL 獲取:

存儲庫.java

@Repository
public class CustomRepositoryImpl {
  @Autowired
  private EntityManager entityManager;

  public List<Dto> find() {
    var query = "SELECT new Dto(
                    x.Field1, 
                    y.Field2, 
                    z.Field3, 
                    ...)
                 FROM XxxEntity x
                 LEFT JOIN YyyEntity y
                 LEFT JOIN ZzzEntity z"

    var jpqlQuery = entityManager.createQuery(query);

    return jpqlQuery.getResultList();
  }
}

驅動程序

public class Dto {

    // Must have parameterized constructor with all fields what used in Repository
    public Dto(int field1, String field2, String field3, ...) {
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM