Я пишу это запрос на попытку фильтрации мультимедиа:
Код: Выделить всё
@Query("SELECT m FROM MediaModel m " +
"LEFT JOIN AlternativeTitleModel a ON a MEMBER OF m.alternativeTitles " +
"WHERE m.mediaCategory = :category " +
"AND m.id = :id " +
"OR m.name LIKE CONCAT('%',:name,'%') " +
"OR a.name LIKE CONCAT('%',:alternativeTitle,'%')")
public List findMediaByIdOrNameOrAlternativeTitleAndMediaCategory(
@Param("id") Integer id,
@Param("name") String name,
@Param("alternativeTitle") String alternativeTitle,
@Param("category") MediaCategoryModel category
);
Код: Выделить всё
public Optional findMediaByIdAndMediaCategory(Integer id, MediaCategoryModel category);
MediaModel.java
Код: Выделить всё
package com.espacogeek.geek.models;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import org.hibernate.annotations.UpdateTimestamp;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Index;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.JoinTable;
import jakarta.persistence.ManyToMany;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import jakarta.persistence.Transient;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Entity
@Table(name = "medias", indexes = {@Index(name = "idx_name_media", columnList = "name", unique = true)})
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class MediaModel implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_media")
private Integer id;
@Column(name = "name_media")
private String name;
@Column(name = "episode_count")
private Integer totalEpisodes;
@Column(name = "episode_length_in_minutes")
private Integer episodeLength;
@Column(name = "about", length = 1000)
private String about;
@Column(name = "url_cover")
private String cover;
@Column(name = "url_banner")
private String banner;
@JoinColumn(name = "id_category")
private MediaCategoryModel mediaCategory;
@OneToMany(mappedBy = "media", fetch = FetchType.EAGER)
private List externalReference;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
name = "medias_has_companies",
joinColumns = @JoinColumn(name = "medias_id_media"),
inverseJoinColumns = @JoinColumn(name = "companies_id_company"))
private List company;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
name = "medias_has_people",
joinColumns = @JoinColumn(name = "medias_id_media"),
inverseJoinColumns = @JoinColumn(name = "people_id_person"))
private List people;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
name = "medias_has_genres",
joinColumns = @JoinColumn(name = "medias_id_media"),
inverseJoinColumns = @JoinColumn(name = "genres_id_genre"))
private List genre;
@OneToMany(mappedBy = "media")
@Transient
private List userLibrary;
@UpdateTimestamp
@Column(name = "update_at")
private Date updateAt;
@OneToMany(mappedBy = "media", fetch = FetchType.EAGER)
private List alternativeTitles;
@OneToMany(mappedBy = "media", fetch = FetchType.EAGER)
private List season;
}
Код: Выделить всё
package com.espacogeek.geek.models;
import java.io.Serializable;
import java.util.List;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Index;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Table(name = "alternative_titles", indexes = { @Index(name = "idx_name_alternative_title",columnList = "name", unique = true) })
@Entity
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class AlternativeTitleModel implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_alternative_title")
private Integer id;
@Column(name = "name_title")
private String name;
@ManyToOne
@JoinColumn(name = "id_midia")
private MediaModel media;
}
Код: Выделить всё
package com.espacogeek.geek.models;
import java.io.Serializable;
import java.util.List;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import jakarta.persistence.Transient;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "media_categories")
public class MediaCategoryModel implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_media_category")
private Integer id;
@Column(name = "type_category")
private String typeCategory;
@OneToMany(mappedBy = "mediaCategory")
@Transient
private List medias;
}
Спасибо за внимание.
Подробнее здесь: https://stackoverflow.com/questions/788 ... ive-titles
Мобильная версия