1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Associação Hibernate Erro

Estou com um erro ao tentar fazer uma associação de uma chave estrangeira em uma Tabela do banco. O que acontece e o seguinte, tenho uma 'Entidade' Filme e uma 'Entidade' Fornecedor, minha regra de negócio é que cada Filme tem um Fornecedor, e um Fornecedor tem vários filmes(@ManyToOne).

Eu preciso que as duas classes sejam entidades pois ambas serão persistidas no banco de dados. Então as duas tem que ter anotações @id obrigatórios e pelo que pesquisei na internet na minha classe Filme aonde vai um atributo Fornecedor eu preciso apenas colocar uma anotação @ManyToOne para ser reconhecida como chave estrangeira... porém está dando o seguinte erro e eu não sei o que pode ser:

ERROR: Unknown column 'this_.fornecedor_ID' in 'field list'
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    at javafx.fxml.FXMLLoader$MethodHandler.invoke(Unknown Source)
    at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(Unknown Source)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unknown Source)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(Unknown Source)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
    at com.sun.javafx.event.EventUtil.fireEventImpl(Unknown Source)
    at com.sun.javafx.event.EventUtil.fireEvent(Unknown Source)
    at javafx.event.Event.fireEvent(Unknown Source)
    at javafx.scene.Node.fireEvent(Unknown Source)
    at javafx.scene.control.Button.fire(Unknown Source)
    at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(Unknown Source)
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(Unknown Source)
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(Unknown Source)
    at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(Unknown Source)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unknown Source)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(Unknown Source)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
    at com.sun.javafx.event.EventUtil.fireEventImpl(Unknown Source)
    at com.sun.javafx.event.EventUtil.fireEvent(Unknown Source)
    at javafx.event.Event.fireEvent(Unknown Source)
    at javafx.scene.Scene$MouseHandler.process(Unknown Source)
    at javafx.scene.Scene$MouseHandler.access$1500(Unknown Source)
    at javafx.scene.Scene.impl_processMouseEvent(Unknown Source)
    at javafx.scene.Scene$ScenePeerListener.mouseEvent(Unknown Source)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Unknown Source)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$350(Unknown Source)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$$Lambda$101/32671782.get(Unknown Source)
    at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(Unknown Source)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(Unknown Source)
    at com.sun.glass.ui.View.handleMouseEvent(Unknown Source)
    at com.sun.glass.ui.View.notifyMouse(Unknown Source)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$145(Unknown Source)
    at com.sun.glass.ui.win.WinApplication$$Lambda$36/3326003.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at sun.reflect.misc.Trampoline.invoke(Unknown Source)
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at sun.reflect.misc.MethodUtil.invoke(Unknown Source)
    ... 55 more
Caused by: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
    at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:123)
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112)
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:91)
    at org.hibernate.loader.Loader.getResultSet(Loader.java:2066)
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1863)
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1839)
    at org.hibernate.loader.Loader.doQuery(Loader.java:910)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:355)
    at org.hibernate.loader.Loader.doList(Loader.java:2554)
    at org.hibernate.loader.Loader.doList(Loader.java:2540)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2370)
    at org.hibernate.loader.Loader.list(Loader.java:2365)
    at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:126)
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1718)
    at org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:380)
    at sys_modelos.GenericoDao.lista(GenericoDao.java:74)
    at sys_modelos.FilmeDao.listaFilmes(FilmeDao.java:27)
    at sys_view.CadastroFilmeController.setAppGeral(CadastroFilmeController.java:74)
    at sys_entidades.AppGeral.showCadastroFilme(AppGeral.java:199)
    at sys_view.PainelCadastroController.ActionFilme(PainelCadastroController.java:26)
    ... 64 more
Caused by: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Unknown column 'this_.fornecedor_ID' in 'field list'
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3283)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1332)
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1467)
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:82)
    ... 81 more

Minha classe Filme:

package sys_modelos;

import java.time.LocalDate;

import javax.persistence.*; 
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;

import javafx.beans.property.IntegerProperty;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import sys_util.LocalDateAdapter;

@Entity
@Access(AccessType.PROPERTY)
@Table(name="FILME", schema="locasystem")
public class Filme {

    private final IntegerProperty Filme_ID;
    private final StringProperty titulo;
    private final StringProperty genero;
    private final StringProperty ator;
    private final StringProperty diretor;
    private final StringProperty descricao;
    private final ObjectProperty<Fornecedor> fornecedor;
    private final ObjectProperty<FilmeSubGrupo> tipoPreco;
    private final ObjectProperty<LocalDate> dateEntrada;
    private final ObjectProperty<LocalDate> dateMudanca;
    private final ObjectProperty<FilmeSubGrupo> tipoMudanca;

    public Filme() {
        this.Filme_ID = new SimpleIntegerProperty();

        this.titulo = new SimpleStringProperty("");
        this.genero = new SimpleStringProperty("");
        this.ator = new SimpleStringProperty("");
        this.diretor = new SimpleStringProperty("");
        this.descricao = new SimpleStringProperty("");
        this.fornecedor = new SimpleObjectProperty<Fornecedor>(null);
        this.tipoPreco = new SimpleObjectProperty<FilmeSubGrupo>(null);
        this.dateEntrada = new SimpleObjectProperty<LocalDate>(null);
        this.dateMudanca = new SimpleObjectProperty<LocalDate>(null);
        this.tipoMudanca = new SimpleObjectProperty<FilmeSubGrupo>(null);
    }

    @Id
    @GeneratedValue
    @Column(name="ID") 
    public int getID() {
        return Filme_ID.get();
    }

    public void setID(int ID) {
        this.Filme_ID.set(ID);
    }

    public IntegerProperty IDProperty() {
        return Filme_ID;
    }    

    @Column(name="TITULO", nullable=false)
    public String getTitulo() {
        return titulo.get();
    }

    public void setTitulo(String titulo) {
        this.titulo.set(titulo);
    }

    public StringProperty tituloProperty() {
        return titulo;
    }

    @Column(name="GENERO", nullable=false)
    public String getGenero() {
        return genero.get();
    }

    public void setGenero(String genero) {
        this.genero.set(genero);
    }

    public StringProperty generoProperty() {
        return genero;
    }

    @Column(name="ATOR", nullable=false)
    public String getAtor() {
        return ator.get();
    }

    public void setAtor(String ator) {
        this.ator.set(ator);
    }

    public StringProperty atorProperty() {
        return ator;
    }

    @Column(name="DIRETOR", nullable=false)
    public String getDiretor() {
        return diretor.get();
    }

    public void setDiretor(String diretor) {
        this.diretor.set(diretor);
    }

    public StringProperty diretorProperty() {
        return diretor;
    }

    @Column(name="DESCRICAO", nullable=false)
    public String getDescricao() {
        return descricao.get();
    }

    public void setDescricao(String descricao) {
        this.descricao.set(descricao);
    }

    public StringProperty descricaoProperty() {
        return descricao;
    }

    //@Column(name="FORNECEDOR", nullable=false)
    @ManyToOne(cascade=CascadeType.ALL)  
    public Fornecedor getFornecedor() {
        return fornecedor.get();
    }

    public void setFornecedor(Fornecedor fornecedor) {
        this.fornecedor.set(fornecedor);
    }

    public ObjectProperty<Fornecedor> fornecedorProperty() {
        return fornecedor;
    }

    //@Column(name="TIPOPRECO", nullable=false)
    @OneToOne(cascade=CascadeType.ALL)  
    public FilmeSubGrupo getTipoPreco() {
        return tipoPreco.get();
    }

    public void setTipoPreco(FilmeSubGrupo tipoPreco) {
        this.tipoPreco.set(tipoPreco);
    }

    public ObjectProperty<FilmeSubGrupo> tipoPrecoProperty() {
        return tipoPreco;
    }

    @Column(name="DATEENTRADA", nullable=false)
    @XmlJavaTypeAdapter(LocalDateAdapter.class)
    public LocalDate getDateEntrada() {
        return dateEntrada.get();
    }

    public void setDateEntrada(LocalDate localDate) {
        this.dateEntrada.set(localDate);
    }

    public ObjectProperty<LocalDate> dateEntradaProperty() {
        return dateEntrada;
    }

    @Column(name="DATEMUDANCA", nullable=false)
    @XmlJavaTypeAdapter(LocalDateAdapter.class)
    public LocalDate getDateMudanca() {
        return dateMudanca.get();
    }

    public void setDateMudanca(LocalDate dateMudanca) {
        this.dateMudanca.set(dateMudanca);
    }

    public ObjectProperty<LocalDate> dateMudancaProperty() {
        return dateMudanca;
    }

    //@Column(name="TIPOMUDANCA", nullable=false)
    @OneToOne(cascade=CascadeType.ALL)  
    public FilmeSubGrupo getTipoMudanca() {
        return tipoMudanca.get();
    }

    public void setTipoMudanca(FilmeSubGrupo tipoMudanca) {
        this.tipoMudanca.set(tipoMudanca);
    }

    public ObjectProperty<FilmeSubGrupo> tipoMudancaProperty() {
        return tipoMudanca;
    }
    @Override
    public String toString() {
        return this.getTitulo();
    }
}

Minha classe Fornecedor:

package sys_modelos;
import javax.persistence.*; 

import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;

@Entity
@Access(AccessType.PROPERTY)
@Table(name="FORNECEDOR", schema="locasystem")
public class Fornecedor {

    private final IntegerProperty IDFILME;
    private final StringProperty nome;
    private final StringProperty cidade;
    private final StringProperty endereco;
    private final StringProperty numero;
    private final StringProperty CNPJ;
    private final StringProperty telefone;
    private final StringProperty email;

    public Fornecedor() {
        this.IDFILME = new SimpleIntegerProperty();

        this.nome = new SimpleStringProperty("");
        this.cidade = new SimpleStringProperty("");
        this.endereco = new SimpleStringProperty("");
        this.numero = new SimpleStringProperty("");
        this.CNPJ = new SimpleStringProperty("");
        this.telefone = new SimpleStringProperty("");
        this.email = new SimpleStringProperty("");
    }

    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)  
    @Column(name="ID") 
    public int getIDFILME() {
        return IDFILME.get();
    }

    public void setIDFILME(int ID) {
        this.IDFILME.set(ID);
    }

    public IntegerProperty IDProperty() {
        return IDFILME;
    }    

    @Column(name="NOME", nullable=false)
    public String getNome() {
        return nome.get();
    }

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

    public StringProperty nomeProperty() {
        return nome;
    }

    @Column(name="ENDERECO", nullable=false)
    public String getEndereco() {
        return endereco.get();
    }

    public void setEndereco(String endereco) {
        this.endereco.set(endereco);
    }

    public StringProperty enderecoProperty() {
        return endereco;
    }

    @Column(name="CIDADE", nullable=false)
    public String getCidade() {
        return cidade.get();
    }

    public void setCidade(String cidade) {
        this.cidade.set(cidade);
    }

    public StringProperty cidadeProperty() {
        return cidade;
    }

    @Column(name="NUMERO", nullable=false)
    public String getNumero() {
        return numero.get();
    }

    public void setNumero(String numero) {
        this.numero.set(numero);
    }

    public StringProperty numeroProperty() {
        return numero;
    }

    @Column(name="CNPJ", nullable=false)
    public String getCNPJ() {
        return CNPJ.get();
    }

    public void setCNPJ(String cnpj) {
        this.CNPJ.set(cnpj);
    }

    public StringProperty cnpjProperty() {
        return CNPJ;
    }

    @Column(name="TELEFONE", nullable=false)
    public String getTelefone() {
        return telefone.get();
    }

    public void setTelefone(String telefone) {
        this.telefone.set(telefone);
    }

    public StringProperty telefoneProperty() {
        return telefone;
    }

    @Column(name="EMAIL", nullable=false)
    public String getEmail() {
        return email.get();
    }

    public void setEmail(String email) {
        this.email.set(email);
    }

    public StringProperty emailProperty() {
        return email;
    }
    @Override
    public String toString() {
        return this.getNome();
    }
}

Alguem sabe o que pode ser esse ERROR: Unknown column 'this_.fornecedor_ID' in 'field list'?

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

3 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags hibernate ou faça a sua própria pergunta.