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]
Данные сущности: [code]@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; } [/code] Данная база данных: [code]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 | +----+-------------+----------------------------+---------------+ [/code] Как вы видите, коллекция 40 имеет 2 Collection_access 2 и 3. Я хочу сделать JPQL select коллекцией который: [list] [*]Имеет значение идентификатора 40 И [*][code]join fetch[/code] его CollectionAccess с условием: if ([code]createdBy[/code] match) ИЛИ (любой CollectionAccess имеет accessType = 1 И expirationAtUtc [/list] (JOIN FETCH предотвращает проблему с N + 1 запросами): [code]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
Я разрабатываю проект Spring Boot (Java 17).
Я создал функцию в базе данных. функция возвращает мне customer_id и список описаний. Я могу получить этот список с помощью кода ниже.
entityManager.createQuery( SELECT FUNCTION( '_function_name',...