Could not find setter

10 respostas
B

Olá pessoal,

Minha aplicação está dando essa exceção:

br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: org.hibernate.PropertyNotFoundException: Could not find setter for PK_id_versao on class br.com.senac.pi4.model.Versao

br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:96)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:93)

br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)

br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)

br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)

br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)

O problema pelo que entendi é porque no banco o nome da coluna da tabela versao é PK_id_versao e o nome da coluna da tabela configuracao é FK_versao, porém o nome do atributo na classe Versao é id_versao e o nome do atributo na classe Configuracao é versao. Por isso eu não tenho getter nem setter para PK_id_versao nem para FK_versao. Vejam meu código:

na classe Versao

@Id @GeneratedValue @Column(name = "PK_id_versao", unique = true, nullable = false) public int getId_versao() { return id_versao; }

na classe Configuracao

@ManyToOne @JoinColumn(name = "FK_versao") public Versao getVersao() { return versao; }

método no DAO

public List<Versao> listarVersoesPorVeiculo(int id_veiculo){ String sql = "SELECT v.* FROM versao v, veiculo_versao vv WHERE v.PK_id_versao = vv.FK_versao AND vv.FK_veiculo = " + id_veiculo; List<Versao> versoes = sessao.createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(Versao.class)).list(); return versoes; }

Tem como resolver isso sem alterar o nome das colunas no banco?

Também não tenho certeza se o problema é esse mesmo que eu desconfio, então se for outro me informem por favor. Tenho que fazer funcionar isso para entregar o projeto na facul daqui a poucos dias então se puderem me ajudar eu agradeço muito.

Obrigado.

10 Respostas

E

Tenta criar um setter para id_versao

B

Já tem setter nas duas classes.

Na classe Versao:
@Id
	@GeneratedValue
	@Column(name = "PK_id_versao", unique = true, nullable = false)
	public int getId_versao() {
		return id_versao;
	}

	public void setId_versao(int id_versao) {
		this.id_versao = id_versao;
	}
Na classe Configuracao:
@ManyToOne
	@JoinColumn(name = "FK_versao")
	public Versao getVersao() {
		return versao;
	}

	public void setVersao(Versao versao) {
		this.versao = versao;
	}

Mais alguma sugestão?

valeu!

E

Se você não quer alterar o nome da sua variável id_versao para PK_id_versao imagino que tu teria que colocar um alias na sua consulta para id_versao, assim na hora de setar os dados Transformers.aliasToBean reconhecerá tal propriedade.

B

Mudei o código na classe do DAO:

public List<Versao> listarVersoesPorVeiculo(int id_veiculo){ String sql = "SELECT v.PK_id_versao id_versao, v.versao id_versao FROM versao v, veiculo_versao vv WHERE v.PK_id_versao = vv.FK_versao AND vv.FK_veiculo = " + id_veiculo; List<Versao> versoes = sessao.createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(Versao.class)).list(); return versoes; }

O erro mudou:

br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: org.hibernate.exception.SQLGrammarException: could not execute query

br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:96)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:93)

br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)

br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)

br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)

br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)

Pelo que vi aqui esse erro que apareceu agora também parece ter a ver com o mapeamento:
http://www.guj.com.br/java/126100-orghibernateexceptionsqlgrammarexception-could-not-execute-query

Alguma outra sugestão?

Obrigado.

E
Posta a causa principal do Hibernate, vai estar mais abaixo o erro.

Posta a causa principal do Hibernate, vai estar mais abaixo o erro.

B

oot cause

org.hibernate.exception.SQLGrammarException: could not execute query

org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:92)

org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)

org.hibernate.loader.Loader.doList(Loader.java:2536)

org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)

org.hibernate.loader.Loader.list(Loader.java:2271)

org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:316)

org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1842)

org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165)

org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:157)

br.com.senac.pi4.dao.VersaoDAO.listarVersoesPorVeiculo(VersaoDAO.java:31)

br.com.senac.pi4.controller.ConfiguracaoController.montagem(ConfiguracaoController.java:42)

sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

java.lang.reflect.Method.invoke(Unknown Source)

br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:61)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:93)

br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)

br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)

br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)

br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)

root cause
java.sql.SQLException: Column PK_id_versao not found.

com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)

com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)

com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)

com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1136)

com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2777)

org.hibernate.type.descriptor.sql.IntegerTypeDescriptor$2.doExtract(IntegerTypeDescriptor.java:61)

org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:64)

org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:253)

org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:249)

org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:234)

org.hibernate.loader.custom.CustomLoader$ScalarResultColumnProcessor.extract(CustomLoader.java:505)

org.hibernate.loader.custom.CustomLoader$ResultRowProcessor.buildResultRow(CustomLoader.java:451)

org.hibernate.loader.custom.CustomLoader.getResultColumnOrRow(CustomLoader.java:348)

org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:639)

org.hibernate.loader.Loader.doQuery(Loader.java:829)

org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)

org.hibernate.loader.Loader.doList(Loader.java:2533)

org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)

org.hibernate.loader.Loader.list(Loader.java:2271)

org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:316)

org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1842)

org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165)

org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:157)

br.com.senac.pi4.dao.VersaoDAO.listarVersoesPorVeiculo(VersaoDAO.java:31)

br.com.senac.pi4.controller.ConfiguracaoController.montagem(ConfiguracaoController.java:42)

sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

java.lang.reflect.Method.invoke(Unknown Source)

br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:61)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:93)

br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)

br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)

br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)

br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.32 logs.
B

Minhas tabelas no Mysql:

mysql> desc configuracao;

±-------------------±--------±-----±----±--------±---------------+

| Field              | Type    | Null | Key | Default | Extra          |

±-------------------±--------±-----±----±--------±---------------+

| PK_id_configuracao | int(11) | NO   | PRI | NULL    | auto_increment |

| FK_cliente         | int(11) | YES  | MUL | NULL    |                |

| FK_veiculo         | int(11) | YES  | MUL | NULL    |                |

| FK_versao          | int(11) | YES  | MUL | NULL    |                |

±-------------------±--------±-----±----±--------±---------------+

4 rows in set (1.31 sec)
mysql> desc versao;

±-------------±-------------±-----±----±--------±---------------+

| Field        | Type         | Null | Key | Default | Extra          |

±-------------±-------------±-----±----±--------±---------------+

| PK_id_versao | int(11)      | NO   | PRI | NULL    | auto_increment |

| versao       | varchar(255) | YES  |     | NULL    |                |

±-------------±-------------±-----±----±--------±---------------+

2 rows in set (0.01 sec)
E

Substitua v.PK_id_versao por v.id_versao na sua SQL

B

Mudei para:

String sql = "SELECT v.* FROM versao v, veiculo_versao vv WHERE v.id_versao = vv.id_versao AND vv.id_veiculo = " + id_veiculo;

Erro ainda:

exception

br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: org.hibernate.exception.SQLGrammarException: could not execute query

br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:96)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:93)

br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)

br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)

br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)

br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)

root cause
org.hibernate.exception.SQLGrammarException: could not execute query

org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:92)

org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)

org.hibernate.loader.Loader.doList(Loader.java:2536)

org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)

org.hibernate.loader.Loader.list(Loader.java:2271)

org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:316)

org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1842)

org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165)

org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:157)

br.com.senac.pi4.dao.VersaoDAO.listarVersoesPorVeiculo(VersaoDAO.java:26)

br.com.senac.pi4.controller.ConfiguracaoController.montagem(ConfiguracaoController.java:42)

sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

java.lang.reflect.Method.invoke(Unknown Source)

br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:61)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:93)

br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)

br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)

br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)

br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)

root cause
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column v.id_versao in 'where clause’

sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)

sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)

java.lang.reflect.Constructor.newInstance(Unknown Source)

com.mysql.jdbc.Util.handleNewInstance(Util.java:406)

com.mysql.jdbc.Util.getInstance(Util.java:381)

com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030)

com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)

com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3515)

com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3447)

com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1951)

com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2101)

com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2554)

com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1761)

com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1912)

org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208)

org.hibernate.loader.Loader.getResultSet(Loader.java:1953)

org.hibernate.loader.Loader.doQuery(Loader.java:802)

org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)

org.hibernate.loader.Loader.doList(Loader.java:2533)

org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)

org.hibernate.loader.Loader.list(Loader.java:2271)

org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:316)

org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1842)

org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165)

org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:157)

br.com.senac.pi4.dao.VersaoDAO.listarVersoesPorVeiculo(VersaoDAO.java:26)

br.com.senac.pi4.controller.ConfiguracaoController.montagem(ConfiguracaoController.java:42)

sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

java.lang.reflect.Method.invoke(Unknown Source)

br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:61)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:93)

br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)

br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)

br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)

br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)

br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)
B

Resolvi de duas formas, mas nenhuma delas seria ideal ao meu ver. A primeira forma foi deixar o mesmo nome nos atributos das classes e nas colunas dos bancos, então substitui algumas linhas no código:

Na classe Versao

@Id @GeneratedValue //@Column(name = "PK_id_versao", unique = true, nullable = false) //COMENTADO ASSIM ESTAVA DANDO ERRO @Column(name = "id_versao", unique = true, nullable = false) public int getId_versao() { return id_versao; }

Na classe Veiculo

@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	@JoinTable(name = "veiculo_versao", joinColumns = { 
			//@JoinColumn(name = "FK_veiculo", nullable = false, updatable = false) },  //COMENTADO ASSIM ESTAVA DANDO ERRO
			//inverseJoinColumns = { @JoinColumn(name = "FK_versao", //COMENTADO ASSIM ESTAVA DANDO ERRO
			@JoinColumn(name = "id_veiculo", nullable = false, updatable = false) }, 
			inverseJoinColumns = { @JoinColumn(name = "id_versao", 
					nullable = false, updatable = false) })
	public List<Versao> getVersoes() {
		return versoes;
	}

Na classe VersaoDAO

public List<Versao> listarVersoesPorVeiculo(int id_veiculo){ String sql = "SELECT v.* FROM versao v, veiculo_versao vv WHERE v.id_versao = vv.id_versao AND vv.id_veiculo = " + id_veiculo; List<Versao> versoes = sessao.createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(Versao.class)).list(); return versoes; }

Isso é um problema pois faz as colunas no meu banco ficarem fora de padrão.

Segunda solução foi usar JDBC para fazer a query, mas queria fazer usando o Hibernate mesmo, que seria o mais correto já que o estou usando na aplicação toda. Nessa caso ficaria assim:

Na classe Versao

@Id @GeneratedValue @Column(name = "PK_id_versao", unique = true, nullable = false) public int getId_versao() { return id_versao; }

Na classe Veiculo

@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	@JoinTable(name = "veiculo_versao", joinColumns = { 
			@JoinColumn(name = "FK_veiculo", nullable = false, updatable = false) }, 
			inverseJoinColumns = { @JoinColumn(name = "FK_versao", 
					nullable = false, updatable = false) })
	public List<Versao> getVersoes() {
		return versoes;
	}

Na classe VersaoDAO

public List<Versao> listarVersoesPorVeiculo(int id_veiculo){
		String sql = "SELECT v.PK_id_versao id_versao, v.versao id_versao FROM versao v, veiculo_versao vv WHERE v.PK_id_versao = vv.FK_versao AND vv.FK_veiculo = " + id_veiculo; //qd tem atributos da classe e colunas no banco com nomes diferentes o Hibernate se perde, então essa query só funciona com JDBC
			
		List<Versao> versoes = new ArrayList<Versao>();
		Versao versao = null;
		
		try {
			Class.forName("com.mysql.jdbc.Driver");
			Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/pi4?user=pi4&password=pi4");
			Statement stm = conn.createStatement();  
			ResultSet rs = stm.executeQuery(sql);
			
			while(rs.next()){
				versao = new Versao();
				versao.setId_versao(rs.getInt(1));
				versao.setVersao(rs.getString(2));
				
				versoes.add(versao);
			}
			
			return versoes;
			
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

Se alguém tiver como ajudar com uma solução melhor agradeço.

Obrigado.

Criado 20 de novembro de 2012
Ultima resposta 20 de nov. de 2012
Respostas 10
Participantes 2