Карта Hibernate / JPA Результат нативного запроса к сущностям, не являющимся сущностями - PullRequest
0 голосов
/ 07 июня 2018

У меня есть 3 сущности, и я хочу присоединиться к ним.Поскольку для этого мне не нужно создавать новую сущность, я просто хотел отобразить ее, извлекая с помощью собственного запроса:

EntityA{
    ...
    String someValue;
}

EntityB{
    ...
    String someValue;
}

EntityC{
    ...
    String someValue;
}

и объекта CrossJoined

CrossJoinedFoo{
    EntityA entityA;
    EntityB entityB;
    EntityC entityC;
}

, который я используюэто как:

private static final String _SELECT_CROSS_JOIN_ENTITIES = "SELECT * FROM "
            + "EntityA"
            + ", "
            + "EntityB"
            + ", "
            + "EntityC"
            + " WHERE (1=1) "
            + " AND " + "EntityA.someValue = :someValue"
            + " AND " + "EntityB.someValue = :someValue"
            + " AND " + "EntityC.someValue = :someValue";

Query query = entityManager.createNativeQuery(_SELECT_CROSS_JOIN_ENTITIES);
query.setParameter(":someValue", "foo");

Как мне добиться этого поведения?

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Использование @SqlResultSetMapping с @ConstructorResult

Остерегайтесь того, что полученные объекты не будут управляемыми

0 голосов
/ 07 июня 2018

Вы можете перейти на HQL-запрос и использовать стратегию класса результата.Просто не забудьте добавить конструктор в CrossJoinedFoo, принимающий 3 объекта в соответствующем порядке:

private static final String _SELECT_CROSS_JOIN_ENTITIES = 
            "SELECT new my.package.CrossJoinedFoo(a,b,c) FROM "
            + "EntityA a"
            + ", "
            + "EntityB b"
            + ", "
            + "EntityC c"
            + " WHERE (1=1) "
            + " AND " + "a.someValue = :someValue"
            + " AND " + "b.someValue = :someValue"
            + " AND " + "c.someValue = :someValue";

Query query = entityManager.createQuery(_SELECT_CROSS_JOIN_ENTITIES);
query.setParameter(":someValue", "foo");

List<CrossJoinedFoo> result = query.list();

Просто не забудьте изменить пакет на соответствующий.

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