Как использовать JPA для выбора собственных столбцов таблицы? - PullRequest
0 голосов
/ 11 марта 2020

Я хочу выбрать несколько столбцов из таблицы, используя JPA. В этом случае меня интересуют не полные сущности, а несколько столбцов с определенными идентификаторами.

Таков мой подход:

EntityManager em = createEntityManager();
List<Object[]> data = em.createNativeQuery( "SELECT ID, FOREIGN_OBJ_1_ID, FOREIGN_OBJ_2_ID FROM TABLE1" ).getResultList();
em.close();

for ( Object[] row : rentaldata )
{
     Long id = ( (BigDecimal) row[0] ).longValue();
     Long fk_1 = ((Long) row[1]);
     Long fk_2 = ((Long) row[2]);

      DataObject do = new DataObject(id, fk_1, fk_2, ...);
...

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

спасибо, Торстен

1 Ответ

2 голосов
/ 11 марта 2020

Вы можете использовать SqlResultMapping. Попробуйте что-то вроде этого:

 Query q = em.createNativeQuery(
        "SELECT o.id AS order_id, " +
            "o.quantity AS order_quantity, " +
            "o.item AS order_item, " +
            "i.name AS item_name, " +
        "FROM Order o, Item i " +
        "WHERE (order_quantity > 25) AND (order_item = i.id)",
    "OrderResults");

    @SqlResultSetMapping(name="OrderResults", 
        entities={ 
            @EntityResult(entityClass=com.acme.Order.class, fields={
                @FieldResult(name="id", column="order_id"),
                @FieldResult(name="quantity", column="order_quantity"), 
                @FieldResult(name="item", column="order_item")})},
        columns={
            @ColumnResult(name="item_name")}
    )

Подробнее здесь и здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...