Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro no OneToMany

Eu estou criando um banco de dados de uma videolocadora, onde até então tem uma tabela filme e categoria. O meu raciocínio é que um filme possui várias categorias, por isso coloquei um para muitos (OneToMany), mas esta dando erro no meu programa.

Erro =

Multiple markers at this line
    - The attribute type for a collection mapping must be java.util.Collection, java.util.Set, java.util.List or java.
     util.Map
    - Target entity is not defined

Classes =

package com.github.lucasdevrj.longametragem.modelo;

import java.sql.Time;
import java.time.Year;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity //Indica que a classe é uma entidade da JPA, ou seja, tem uma tabela no banco a representando
@Table(name = "filme") //Nome da tabela do banco
public class Filme {

    @Id //Para mostrar o atributo id
    @GeneratedValue(strategy = GenerationType.IDENTITY) // para mostrar como o valor é gerado
    private int id;
    private String nome;
    private int faixa;

    @OneToMany //erro acontece aqui
    private Categoria categoria;
    private String sinopse;
    private Year ano;
    private Time duracao;
    private String elenco;
    private String direcao;

    public Filme(String nome, int faixa, Categoria categoria, String sinopse, Year ano, Time duracao, String elenco,String direcao) {
        this.nome = nome;
        this.faixa = faixa;
        this.categoria = categoria;
        this.sinopse = sinopse;
        this.ano = ano;
        this.duracao = duracao;
        this.elenco = elenco;
        this.direcao = direcao;
    }

    public Filme() {

    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public int getFaixa() {
        return faixa;
    }

    public void setFaixa(int faixa) {
        this.faixa = faixa;
    }

    public Categoria getCategoria() {
        return categoria;
    }

    public void setCategoria(Categoria categoria) {
        this.categoria = categoria;
    }

    public String getSinopse() {
        return sinopse;
    }

    public void setSinopse(String sinopse) {
        this.sinopse = sinopse;
    }

    public Year getAno() {
        return ano;
    }

    public void setAno(Year ano) {
        this.ano = ano;
    }

    public Time getDuracao() {
        return duracao;
    }

    public void setDuracao(Time duracao) {
        this.duracao = duracao;
    }

    public String getElenco() {
        return elenco;
    }

    public void setElenco(String elenco) {
        this.elenco = elenco;
    }

    public String getDirecao() {
        return direcao;
    }

    public void setDirecao(String direcao) {
        this.direcao = direcao;
    }
}
package com.github.lucasdevrj.longametragem.modelo;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity //Indica que a classe é uma entidade da JPA, ou seja, tem uma tabela no banco a representando
@Table(name = "categoria") //Nome da tabela do banco
public class Categoria {

    @Id //Para mostrar o atributo id
    @GeneratedValue(strategy = GenerationType.IDENTITY) // para mostrar como o valor é gerado
    private int id;
    private String nome;
}

Eu tentei colocar as categorias como lista, porque vi isso na net, mas não deu muito certo.

Alguém pode me ajudar? Por favor

1 resposta
solução!

Solucionei o problema com a ajuda da comunidade Alura do Discord.

Classes

package com.github.lucasdevrj.longametragem.modelo;

import java.time.Year;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

@Entity //Indica que a classe é uma entidade da JPA, ou seja, tem uma tabela no banco a representando
@Table(name = "filme") //Nome da tabela do banco
public class Filme {

    @Id //Para mostrar o atributo id
    @GeneratedValue(strategy = GenerationType.IDENTITY) // para mostrar como o valor é gerado
    private int id;
    private String nome;
    private int faixa;
    @ManyToMany
    private List<Categoria> categorias;
    private String sinopse;
    private Year ano;
    private int minutos;
    @OneToOne
    private Elenco elenco;
    private String direcao;

    public Filme(String nome, int faixa, List<Categoria> categorias, String sinopse, Year ano, int minutos,Elenco elenco, String direcao) {
        this.nome = nome;
        this.faixa = faixa;
        this.categorias = categorias;
        this.sinopse = sinopse;
        this.ano = ano;
        this.minutos = minutos;
        this.elenco = elenco;
        this.direcao = direcao;
    }

    public Filme() {

    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public int getFaixa() {
        return faixa;
    }

    public void setFaixa(int faixa) {
        this.faixa = faixa;
    }

    public List<Categoria> getCategorias() {
        return categorias;
    }

    public void setCategorias(List<Categoria> categorias) {
        this.categorias = categorias;
    }

    public String getSinopse() {
        return sinopse;
    }

    public void setSinopse(String sinopse) {
        this.sinopse = sinopse;
    }

    public Year getAno() {
        return ano;
    }

    public void setAno(Year ano) {
        this.ano = ano;
    }

    public int getMinutos() {
        return minutos;
    }

    public void setMinutos(int minutos) {
        this.minutos = minutos;
    }

    public Elenco getElenco() {
        return elenco;
    }

    public void setElenco(Elenco elenco) {
        this.elenco = elenco;
    }

    public String getDirecao() {
        return direcao;
    }

    public void setDirecao(String direcao) {
        this.direcao = direcao;
    }
}
package com.github.lucasdevrj.longametragem.modelo;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity //Indica que a classe é uma entidade da JPA, ou seja, tem uma tabela no banco a representando
@Table(name = "categoria") //Nome da tabela do banco
public class Categoria {

    @Id //Para mostrar o atributo id
    @GeneratedValue(strategy = GenerationType.IDENTITY) // para mostrar como o valor é gerado
    private int id;
    private String nome;

    public Categoria() {

    }

    public Categoria(String nome) {
        this.nome = nome;
    }

    public String getNome() {
        return nome;
    }
}

Solucionei colocando a categoria como uma lista na classe Filme e adicionando o relacionamento de muitos para muitos. Muito obrigado!!