Соедините 2 таблицы, используя Spring JPA - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть две сущности (Invoice и InvoiceItems) без добавления каких-либо отношений.

Счет

public class Invoice {

        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long invoiceID;

        @Column(name="code")
        private String code;

       //other columns
    }

Элементы счета

public class InvoiceItems {


    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long invItemID;

    @Column(name="invoice_id")
    private Integer invoiceId;

    //other columns
}

Могу ли я присоединиться к этим объектам и получить данные без добавления отношений, используя JPA? Если это невозможно, как объединить 2 объекта, используя JPQL или собственный запрос?

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

Да, вы можете присоединиться к этим объектам и получать данные, не добавляя отношения, используя JPA, но это немного теряет цель использования JPA.

Сначала необходимо создать класс java, который будет быть возвращаемым объектом данных из БД. После этого вы можете использовать метод createNamedQuery для entityManager, чтобы получить результат.

createNamedQuery(String sqlString, ResultClass.Class)

sqlString может выглядеть примерно так:

SELECT INV.INVOICE_ID
       INV.CODE
       INV_ITEMS.INV_ITEM_ID
  FROM INVOICE INV
  JOIN INVOICE_ITEMS INV_ITEMS
    ON INV.INVOICE_ID = INV_ITEMS.INVOICE_ID;

И соответствующий ResultClass:

public class ResultClass {

    private Long invoiceID;
    private String code;
    private Long invItemID;

    // other columns
}

Или вы даже можете использовать RowMapper для отображения объекта самостоятельно для большей гибкости, используя JdbcTemplate с методом query ().

0 голосов
/ 17 апреля 2020

Если ваши данные верны, то с помощью собственного запроса вы можете сделать это

@Query(nativeQuery = true, "select * from Invoice i join InvoiceItems im on i.id = im.invoice_id")
public List<Invoice> findData();

Но это не очень хороший способ объединиться без связи с использованием JPA.

...