JPQL, как присоединиться к выборке списка с любым условием соответствия спискуJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 JPQL, как присоединиться к выборке списка с любым условием соответствия списку

Сообщение Anonymous »

Данные сущности:

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

@Entity
@Data
public class Collection {

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

private String createdBy;

@OneToMany(mappedBy = "collection")
private List collectionAccesses;

}

@Entity
@Data
public class CollectionAccess {

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

@ManyToOne
@JoinColumn(
foreignKey =
@ForeignKey(
value = ConstraintMode.PROVIDER_DEFAULT,
name = "fk_collectionaccess_collection_collections_id"))
private Collection collection;

private Integer accessType;
private LocalDateTime expirationAtUtc;
}
Данная база данных:

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

select id, created_by from collection;
+----+------------+
| id | created_by |
+----+------------+
| 40 |   ABC123   |
+----+------------+

select * from collection_access;
+----+-------------+----------------------------+---------------+
| id | access_type | expiration_at_utc          | collection_id |
+----+-------------+----------------------------+---------------+
|  2 |           0 | 2011-12-03 03:15:30.000000 |            40 |
|  3 |           1 | 2011-12-03 03:15:30.000000 |            40 |
+----+-------------+----------------------------+---------------+
Как вы видите, коллекция 40 имеет 2 Collection_access 2 и 3.
Я хочу сделать JPQL select коллекцией который:
  • Имеет значение идентификатора 40 И
  • Код: Выделить всё

    join fetch
    его CollectionAccess с условием: if (

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

    createdBy
    match) ИЛИ (любой CollectionAccess имеет accessType = 1 И expirationAtUtc
(JOIN FETCH предотвращает проблему с N + 1 запросами):

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

createQuery(
"SELECT c FROM Collection c "
+ "LEFT JOIN FETCH c.collectionAccesses ca WHERE c.id = ?1 "
+ "AND (c.createdBy = ?2 OR (ca.accessType = ?3 AND ca.expirationAtUtc 

Подробнее здесь: [url]https://stackoverflow.com/questions/78605966/jpql-how-to-join-fetch-a-list-with-anymatch-condition-against-the-list[/url]
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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