0

続き JPAネイティブクエリで複数のエンティティを取得

  • 私のデータベース (テスト)
    ここに画像の説明を入力

    company - ID {PK}, name
    staff - ID{PK}, name, companyID{FK}
    department - ID{PK}, name, companyID{FK}, staffID{FK}
    project - ID{PK}, name, staffID{FK}
    
  • まず、companyテーブルをバックアップします。

    String query = "SELECT c.ID as companyid, c.name as companyname FROM company c";
    Query q = em.createNativeQuery(query, "MAPPING");
    List<CompanyDTO> list = q.getResultList();
    
    Company.java
    @SqlResultSetMapping(name = "MAPPING", classes = {
    @ConstructorResult(
        targetClass = CompanyDTO.class,
        columns = {
            @ColumnResult(name = "companyid"),
            @ColumnResult(name = "companyname")
        })
    })
    ...
    
  • 次に、staffテーブルをバックアップします。

    String query = "SELECT s.ID as staffid, s.name as staffname, s.companyID as companyID 
                    FROM staff s JOIN company c ON c.ID = s.companyID";
    Query q = em.createNativeQuery(query, "MAPPING");
    List<CompanyDTO> list = q.getResultList();
    
    Company.java
    @SqlResultSetMapping(name = "MAPPING", classes = {
    @ConstructorResult(
        targetClass = CompanyDTO.class,
        columns = {
            @ColumnResult(name = "staffid"),
            @ColumnResult(name = "staffname"),
            @ColumnResult(name = "companyID")
        })
    })
    ...
    
  • 今、テーブルとクラスを修正したくありません。を制御するにはどうすればよいですか? 以下から?

    SELECT ... FROM ? 
    List<?> list = q.getResultList();
    

    助けてください...

4

0 に答える 0