Получение отношений сущностей с использованием собственного SQL-запроса в методе репозитория JPAJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Получение отношений сущностей с использованием собственного SQL-запроса в методе репозитория JPA

Сообщение Anonymous »

У меня есть метод хранилища для получения подписок по электронной почте

Код: Выделить всё

    @Query("SELECT es FROM com.cargurus.emailsubscriptions.entity.EmailSubscription es "
+ "JOIN FETCH es.subscriber s "
+ "WHERE es.id > :batchStartId "
+ "AND es.subscriptionTypeId = :typeId "
+ "AND es.active = :active "
+ "ORDER BY es.id ASC")
List findByIdGreaterThanAndSubscriptionTypeIdAndActive(
@Param("batchStartId") long batchStartId,
@Param("typeId") Integer typeId,
@Param("active") Boolean active,
Pageable pageable);
Вот как определяются подписки по электронной почте.

Код: Выделить всё

public class EmailSubscription {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(updatable = false, nullable = false)
private Long id;

@Column(name = "type_id")
private Integer subscriptionTypeId;
private Boolean active;
@Pattern(regexp = LOCALE_VALIDATION_REGEX, message = "invalid code")
private String locale;
private LocalDateTime lastSentTimestamp;
private Integer lastSentSequence;
private Long lastUpdatePersonId;
private LocalDateTime lastUpdateTimestamp;
private LocalDateTime creationTimestamp;

@ManyToOne(targetEntity = Subscriber.class, fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "subscriber_id", referencedColumnName = "id")
private Subscriber subscriber;
}
К сожалению, этот запрос очень дорог для пакета из 10 тысяч записей (более 10 секунд).
Поэтому я написал собственный SQL-запрос, который занимает менее 1 секунды для получения 10 тысяч записей.

Код: Выделить всё

            @Query(value = "SELECT es.* FROM subscriptions.email_subscriptions es "
+ "IGNORE INDEX (PRIMARY) "
+ "JOIN subscriptions.subscribers s ON es.subscriber_id = s.id "
+ "WHERE es.type_id = :typeId "
+ "AND es.active = :active "
+ "AND es.id > :batchStartId "
+ "ORDER BY es.id ", nativeQuery = true)
Но, к сожалению, этот запрос извлекает только подписки по электронной почте без связи с подписчиком. Как я могу получить подписчика в EmailSusbcription, используя собственный запрос sql

Подробнее здесь: https://stackoverflow.com/questions/790 ... ory-method
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»