Объединение несвязанных таблиц через JPQL - PullRequest
1 голос
/ 15 мая 2019

У меня есть следующий запрос, который работает. Все таблицы в этом запросе имеют отношения в некотором роде.

@Repository(value = "ARepository")
public interface ARepository extends JpaRepository<CardEntity, String> {
    @Query("SELECT xref.shortUtlTx FROM CardEntity card " +
            "JOIN card.apexUrlCrossRef xref " +
            "JOIN xref.sampleProdOffer offer " +
            "WHERE xref.apexCard.cardNumber = :cardNum " +
            "AND offer.apexeeOfferId = :myCode"
    )
    List<String> getAllValues(@Param("cardNum") String cardNum, @Param("myCode") String myCode);
} 

Но я также хотел бы присоединить к этому запросу другую таблицу (имя объекта -> UrlCountEntity), но эта таблица не имеет отношения к другим таблицам в этом запросе. Есть ли способ, которым я мог бы сделать это?

Основываясь на чтении блога, я попробовал следующее, но выдает ошибки. Добавил эту строку в запрос:

И СУЩЕСТВУЕТ (ВЫБЕРИТЕ ReferCount FROM UrlCountEntity referCount.url.urlTx = xref.shortUtlTx)

@Repository(value = "ARepository")
public interface ARepository extends JpaRepository<CardEntity, String> {

    @Query("SELECT xref.shortUtlTx FROM CardEntity card " +
            "JOIN card.apexUrlCrossRef xref " +
            "JOIN xref.sampleProdOffer offer " +
            "WHERE xref.apexCard.cardNumber = :cardNum " +
            "AND offer.apexeeOfferId = :myCode " +
            "AND EXISTS (SELECT referCount FROM UrlCountEntity referCount WHERE referCount.url.urlTx = xref.shortUtlTx)"
    )
    List<String> getAllValues(@Param("cardNum") String cardNum, @Param("myCode") String myCode);

}

Ошибка выглядит следующим образом:

Метод метания 'Org.springframework.dao.InvalidDataAccessResourceUsageException' исключение.

не удалось извлечь ResultSet; SQL [н / п]

1 Ответ

1 голос
/ 15 мая 2019

На основании этой статьи : Используя Hibernate 5.1 или новее, вы можете объединять две несвязанные таблицы через JQPL так же, как вы делаете это в SQL:

SELECT first
FROM First first JOIN
    Second second ON first.property = second.property
WHERE first.property = :param

Так что вам нужноизмените ваш запрос на что-то вроде этого:

@Query("SELECT xref.shortUtlTx FROM CardEntity card " +
        "JOIN card.apexUrlCrossRef xref " +
        "JOIN xref.sampleProdOffer offer " +
        "JOIN UrlCountEntity referCount ON referCount.url.urlTx = xref.shortUtlTx" +
        "WHERE xref.apexCard.cardNumber = :cardNum " +
        "AND offer.apexeeOfferId = :myCode")
List<String> getAllValues(@Param("cardNum") String cardNum, @Param("myCode") String myCode);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...