1
resposta

Erro: member of operator must be a plural path

Ao tentar rodar o código para localizar os atores é disparado uma exception SemanticException: Operand of 'member of' operator must be a plural path.

  List<Series> findByActorsContainingIgnoreCase(String name);

Essas são minhas entidades:

public class Episode {

  @Id
  @GeneratedValue(strategy = GenerationType.UUID)
  private UUID id;
  @Length(min = 1, max = 255)
  private String title;
  @ManyToOne
  @JoinColumn(name = "series_id", nullable = false)
  private Series series;
  private Integer season;
  private Integer number;
  private Double rating;
  private LocalDate releasedAt;
  }
public class Series {

  @Id
  @GeneratedValue(strategy = GenerationType.UUID)
  private UUID id;
  @Length(min = 1, max = 255)
  @Column(unique = true, nullable = false)
  private String title;
  private List<String> genres;
  private List<String> actors;
  @Length(min = 1, max = 255)
  private String poster;
  @Length(min = 1, max = 255)
  private String plot;
  private int totalSeason;
  private double rating;
  @OneToMany(mappedBy = "series", cascade = CascadeType.ALL)
  private List<Episode> episodes = new ArrayList<>();
  }

Obs: Estou usando Lombok e Gson no decorrer do curso.

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
1 resposta

Oi Eric! Tudo bem?

O erro "Operand of 'member of' operator must be a plural path" geralmente ocorre quando tentamos usar member of em um caminho que não é uma coleção.

No seu caso, a consulta findByActorsContainingIgnoreCase(String name) está tentando verificar se um ator está contido na lista de atores de uma série. No entanto, o erro sugere que o caminho usado não é considerado uma coleção válida para o operador member of.

Aqui estão algumas sugestões para resolver o problema:

  1. Verifique o Tipo da Coleção: Certifique-se de que o campo actors na entidade Series é uma coleção. No seu código, actors é uma List<String>, o que está correto. No entanto, o erro pode estar relacionado à forma como o Spring Data JPA está interpretando isso.

  2. Use JPQL ou Criteria API: Se o problema persistir, você pode tentar criar uma consulta personalizada usando JPQL ou a Criteria API. Por exemplo, usando JPQL, você poderia fazer algo como:

    @Query("SELECT s FROM Series s WHERE :name MEMBER OF s.actors")
    List<Series> findByActorName(@Param("name") String name);
    

    Isso assume que actors é uma coleção de strings e que você está verificando se name está contido nessa coleção.

  3. Considere a Estrutura do Banco de Dados: Se possível, considere modificar a estrutura para ter uma entidade Actor separada e uma relação @ManyToMany com Series. Isso pode facilitar consultas mais complexas e melhorar a normalização do banco de dados.

Caso nenhuma das soluções funcionem corretamente, peço que compartilhe comigo todo o seu projeto para que eu possa testar e identificar a causa.

Espero que essas dicas ajudem a resolver o seu problema!

Bons estudos e espero ter ajudado!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.