Olá Pessoal, tudo bom?
Hoje iremos falar sobre um erro de Mapeamento de Entidades JPA, mais especificamente da exception java.sql.SQLSyntaxErrorException: user lacks privilege or object not found
Descrição do Erro
Esse é um erro muito comum de acontecer ao trabalhar com banco de dados. Ele pode especificar 2 pontos. A tabela que está sendo chamada pelo SQL não existe ou a coluna sendo chamada pelo SQL não existe.
Ao mapear entidades via JPA é necessário que o nome da classe esteja de acordo com a tabela a ser referenciada. Caso os nomes da classe e tabela sem iguais, independente das letras serem minúsculas ou maiúsculas, não ocorrerá erro, mas caso sejam diferentes e não for utilizado a annotation javax.persistence.@Table, ocorrerá a exception descrita acima.
Outra forma de gerar erro é que os atributos de uma classe sejam mapeados para as colunas correspondentes da tabela que a classe referencia. Dessa forma é necessário utilizar a annotation javax.persistence.@Column para indicar ao JPA qual é a coluna que o atributo está referenciando. Caso o nome da coluna e o atributo sejam os mesmos, independente se for uma palavra composta por maiúsculas ou minúsculas, não é necessário inserir a annotation, visto que o JPA por padrão adota o nome do atributo como sendo o nome da coluna.
Para um dos dois casos acima ocorrerá um erro com uma stack trace parecida:
java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: nome
at br.pucpr.bsi.prog6.ticketsEventosBSI.dao.PatternDAO.insert(PatternDAO.java:96)
at br.pucpr.bsi.prog6.ticketsEventosBSI.bc.ArtistaBC.insert(ArtistaBC.java:29)
at br.pucpr.bsi.prog6.ticketsEventosBSI.tests.laboratorioBC.TesteArtistaBC.criar(TesteArtistaBC.java:39)
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)
… 35 more
Solução
A solução para este erro é inserir a annotation javax.persistence.@Table sobre o nome da classe ou inserir a annotation javax.persistence.@Column acima do atributo da classe que deseja referenciar a coluna, como mostra o código abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
package br.com.mauda.example.model; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="ARTIST") public class Artista implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = javax.persistence.GenerationType.IDENTITY) private Long id; @Column(name="NAME") private String nome; //outros atributos, métodos e construtores } |
finally{
Caso você achou mais alguma solução para essa exception, por favor deixe nos comentários abaixo!
Duvidas ou sugestões? Deixe seu feedback! Isso ajuda a saber a sua opinião sobre os artigos e melhorá-los para o futuro! Isso é muito importante!
Até um próximo post!
Leave a Reply