Problema HQL

32 respostas
rodrigo.fai

Olá pessoal,

estou com um problema com uma query e não consigo resolver. Será que alguem conseguiria me ajudar?
A query é a seguinte:

StringBuffer sql = new StringBuffer();  
sql.append(" update Projeto set status = :status ");  
sql.append(" where acaoAtividadeDaRelacaoDeIntencao.numeroDoGrupoModular = :grupoModular ");  
sql.append(" and acaoAtividadeDaRelacaoDeIntencao.acaoAtividade.numeroDoModulo > :numeroModulo ");  

Query query = getSession().createQuery(sql.toString());  
query.setParameter("grupoModular", projeto.getAcaoAtividadeDaRelacaoDeIntencao().getNumeroDoGrupoModular());  
query.setParameter("numeroModulo", projeto.getAcaoAtividadeDaRelacaoDeIntencao().getAcaoAtividade().getNumeroDoModulo());  
query.setParameter("status", TipoDeStatusDoProjeto.CANCELAMENTO_ACEITO);  
query.executeUpdate();

E a mensagem de erro é a seguinte:

10:24:42,031 ERROR [JDBCExceptionReporter] ERROR: syntax error at or near ","  
10:24:49,187 FATAL [DaoInterceptor      ] factory has transaction. ROLLBACK!  
25/08/2009 10:24:49 org.apache.catalina.core.StandardWrapperValve invoke  
SEVERE: Servlet.service() for servlet vraptor2 threw exception  
org.postgresql.util.PSQLException: ERROR: syntax error at or near ","

Diz que há um erro de sintaxe no código decorrente de uma ‘,’. Mais notem, não têm nenhuma ‘,’ no codigo HQL!

Não entendo o que está acontecendo.

32 Respostas

R

Coloque toda a stack trace. Talvez tenha alguma coisa que ajude mais embaixo.

rodrigo.fai
10:24:42,031 ERROR [JDBCExceptionReporter] ERROR: syntax error at or near ","
10:24:49,187 FATAL [DaoInterceptor      ] factory has transaction. ROLLBACK!
25/08/2009 10:24:49 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet vraptor2 threw exception
org.postgresql.util.PSQLException: ERROR: syntax error at or near ","
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1608)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1343)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:194)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:304)
	at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105)
	at org.hibernate.hql.ast.exec.BasicExecutor.execute(BasicExecutor.java:98)
	at org.hibernate.hql.ast.QueryTranslatorImpl.executeUpdate(QueryTranslatorImpl.java:419)
	at org.hibernate.engine.query.HQLQueryPlan.performExecuteUpdate(HQLQueryPlan.java:283)
	at org.hibernate.impl.SessionImpl.executeUpdate(SessionImpl.java:1168)
	at org.hibernate.impl.QueryImpl.executeUpdate(QueryImpl.java:117)
	at br.com.faespsenar.sicp.dao.ProjetoDao.cancelarModulosPosteriores(ProjetoDao.java:1543)
	at br.com.faespsenar.sicp.logic.ProjetoAprovadoLogic.frame(ProjetoAprovadoLogic.java:688)
	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 org.vraptor.component.DefaultLogicMethod.execute(DefaultLogicMethod.java:61)
	at org.vraptor.interceptor.ExecuteLogicInterceptor.intercept(ExecuteLogicInterceptor.java:32)
	at org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	at org.vraptor.interceptor.SettingAndValidationInterceptor.intercept(SettingAndValidationInterceptor.java:130)
	at org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	at org.vraptor.interceptor.InjectionInterceptor.intercept(InjectionInterceptor.java:41)
	at org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	at org.vraptor.interceptor.ComponentLookupInterceptor.intercept(ComponentLookupInterceptor.java:57)
	at org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	at br.com.faespsenar.sicp.interceptor.DownloadInterceptor.intercept(DownloadInterceptor.java:39)
	at org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	at br.com.faespsenar.sicp.interceptor.LoginInterceptor.intercept(LoginInterceptor.java:37)
	at org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	at br.com.faespsenar.sicp.interceptor.FactoryInterceptor.intercept(FactoryInterceptor.java:20)
	at org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	at br.com.faespsenar.sicp.interceptor.DaoInterceptor.intercept(DaoInterceptor.java:41)
	at org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	at org.vraptor.interceptor.FlashScopeInterceptor.intercept(FlashScopeInterceptor.java:22)
	at org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	at org.vraptor.interceptor.RegisterAttributesInteceptor.intercept(RegisterAttributesInteceptor.java:47)
	at org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	at org.vraptor.core.VRaptorExecution.execute(VRaptorExecution.java:97)
	at org.vraptor.core.DefaultController.execute(DefaultController.java:46)
	at org.vraptor.http.DefaultDispatcher.dispatch(DefaultDispatcher.java:44)
	at org.vraptor.VRaptorServlet.service(VRaptorServlet.java:48)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
	at java.lang.Thread.run(Unknown Source)
25/08/2009 10:25:55 org.apache.catalina.core.StandardContext reload
INFO: Reloading this Context has started
log4j:ERROR LogMananger.repositorySelector was null likely due to error in class reloading, using NOPLoggerRepository.
25/08/2009 10:25:56 org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(C:\Desenvolvimento\java\workpace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\sicp\WEB-INF\lib\servlet-api-2.4.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
'25/08/2009 10:26:08 org.apache.catalina.core.StandardContext reload
INFO: Reloading this Context has started
log4j:ERROR LogMananger.repositorySelector was null likely due to error in class reloading, using NOPLoggerRepository.
java.lang.NullPointerException
	at org.apache.xerces.impl.dv.dtd.DTDDVFactoryImpl.getBuiltInDV(Unknown Source)
	at org.apache.xerces.impl.dtd.XMLDTDValidator.init(Unknown Source)
	at org.apache.xerces.impl.dtd.XMLDTDValidator.reset(Unknown Source)
	at org.apache.xerces.parsers.XML11Configuration.reset(Unknown Source)
	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
	at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
	at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
	at org.dom4j.io.SAXReader.read(SAXReader.java:465)
	at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1518)
	at org.hibernate.cfg.AnnotationConfiguration.doConfigure(AnnotationConfiguration.java:1035)
	at org.hibernate.cfg.AnnotationConfiguration.doConfigure(AnnotationConfiguration.java:64)
	at org.hibernate.cfg.Configuration.configure(Configuration.java:1462)
	at org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:1017)
	at org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:64)
	at org.hibernate.cfg.Configuration.configure(Configuration.java:1448)
	at org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:1011)
	at br.com.faespsenar.utilities.HibernateUtil.<clinit>(HibernateUtil.java:110)
	at sun.misc.Unsafe.ensureClassInitialized(Native Method)
	at sun.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(Unknown Source)
	at sun.reflect.ReflectionFactory.newFieldAccessor(Unknown Source)
	at java.lang.reflect.Field.acquireFieldAccessor(Unknown Source)
	at java.lang.reflect.Field.getFieldAccessor(Unknown Source)
	at java.lang.reflect.Field.set(Unknown Source)
	at org.apache.catalina.loader.WebappClassLoader.clearReferences(WebappClassLoader.java:1644)
	at org.apache.catalina.loader.WebappClassLoader.stop(WebappClassLoader.java:1524)
	at org.apache.catalina.loader.WebappLoader.stop(WebappLoader.java:707)
	at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4611)
	at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3184)
	at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:404)
	at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1309)
	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1601)
	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590)
	at java.lang.Thread.run(Unknown Source)
25/08/2009 10:26:09 org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(C:\Desenvolvimento\java\workpace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\sicp\WEB-INF\lib\servlet-api-2.4.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
25/08/2009 16:42:30 org.apache.catalina.core.StandardContext reload
INFO: Reloading this Context has started
log4j:ERROR LogMananger.repositorySelector was null likely due to error in class reloading, using NOPLoggerRepository.
25/08/2009 16:42:31 org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(C:\Desenvolvimento\java\workpace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\sicp\WEB-INF\lib\servlet-api-2.4.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
rodrigo.fai

up

R

Veja qual foi o SQL que foi disparado pelo Hibernate ativando o show_sql.
Pra fazer isso, vá no seu arquivo de configuração (se for xml) e coloque a linha:

<property name="show_sql">true</property>

Se for o de properties tb funciona (claro, sem as tags).

Depois posta ai o select que aparecer no console.

edmarr

Você n precisa abrir 2 tópicos para o mesmo assunto , aguarde logo logo um usuário do fórum o respondera .

rodrigo.fai

riccaio:
Veja qual foi o SQL que foi disparado pelo Hibernate ativando o show_sql.
Pra fazer isso, vá no seu arquivo de configuração (se for xml) e coloque a linha:

<property name="show_sql">true</property>

Se for o de properties tb funciona (claro, sem as tags).

Depois posta ai o select que aparecer no console.

Olha só que estranho cara! Não é que aparece uma vírgula no código SQL:


update
Projeto,
set
status=?
where
numeroDoGrupoModular=?
and numeroDoModulo>?
17:29:11,796 ERROR [JDBCExceptionReporter] ERROR: syntax error at or near ","

R

Talvez sua anotação na entidade esteja assim:

@Entity
@Table(name="Projeto,")
public class Projeto {
...
}

Repare na vírgula depois do nome da tabela.

rodrigo.fai

riccaio:
Talvez sua anotação na entidade esteja assim:

@Entity
@Table(name="Projeto,")
public class Projeto {
...
}

Repare na vírgula depois do nome da tabela.

Está não cara! A minha anotação está normal, sem a vírgula!

R

Vc está usando xml ou anotações?

E faça um teste simples, uma consulta bem boba e veja qual select aparece. Algo assim:

Query query = session.createQuery("from Projeto where id < 1");
query.list();

Isso tb dá erro?

rodrigo.fai

riccaio:
Vc está usando xml ou anotações?

E faça um teste simples, uma consulta bem boba e veja qual select aparece. Algo assim:

Query query = session.createQuery("from Projeto where id < 1");
query.list();

Isso tb dá erro?

Estou usando anotações!

leoramos

Usa PreparedStatement e coloca alias (Produto p). O ‘from’ é opcional, mas convém colocar, pois quando tu colocas o From ele limita a só uma, então talvez ele não ponha a vírgula. Não testei aqui, mas acho que funciona.

Abraço!

UPDATE:
Em alguns sites em inglês o pessoal estava tentando resolver isso trocando o driver utilizado para conexão, mas nenhum apontou o resultado. E lembre-se, é claro, de usar o alias também nos itens da cláusula where - p.grupoModular, assim por diante).

(Desculpa se eu falo demais)

leoramos

Opa, vi tuas msgs na outra thread. Tu tá usando Spring, por acaso, não?
Abraço!

rodrigo.fai

leoramos:
Usa PreparedStatement e coloca alias (Produto p). O ‘from’ é opcional, mas convém colocar, pois quando tu colocas o From ele limita a só uma, então talvez ele não ponha a vírgula. Não testei aqui, mas acho que funciona.

Abraço!

UPDATE:
Em alguns sites em inglês o pessoal estava tentando resolver isso trocando o driver utilizado para conexão, mas nenhum apontou o resultado. E lembre-se, é claro, de usar o alias também nos itens da cláusula where - p.grupoModular, assim por diante).

(Desculpa se eu falo demais)

O erro está no Update que estou tentando fazer! Se não me engano, cláusulas FROM não são utilizados quando fazemos um UPDATE!?

rodrigo.fai

leoramos:
Opa, vi tuas msgs na outra thread. Tu tá usando Spring, por acaso, não?
Abraço!

Não, estou usando vRaptor!

leoramos

Sim, que não se usa eu sei, mas na verdade updates ‘puros’ nem são a cara do hibernate. Se tu colocar o from ele funciona também, na realidade… não está ‘errado’, digamos assim, peca-se pelo excesso (pelo menos foi isso que eu vi AGORA na documentação hehe).
O fato é que quando tu usa ‘from’ ele vai limitar a um tipo, então creio que ele não coloque a vírgula. Mas pelo que vi na outra thread, esses atributos nem são dessa classe, né?

leoramos

Sendo bem sincero?
“Updates” e “Deletes” diretos não são muito a cara do Hibernate. É um dos casos que me faz não gostar muito dele, na verdade… nessas horas HQL é um atraso de vida.

Eu usaria nativeQuery, coice no peito mesmo. Perde-se algo de portabilidade (apesar de que nessa sintaxe aí, eu duvido muito), mas economiza dinheiro de aspirina.

rodrigo.fai

leoramos:
Sim, que não se usa eu sei, mas na verdade updates ‘puros’ nem são a cara do hibernate. Se tu colocar o from ele funciona também, na realidade… não está ‘errado’, digamos assim, peca-se pelo excesso (pelo menos foi isso que eu vi AGORA na documentação hehe).
O fato é que quando tu usa ‘from’ ele vai limitar a um tipo, então creio que ele não coloque a vírgula. Mas pelo que vi na outra thread, esses atributos nem são dessa classe, né?

Vc têm algum exemplo aí com update usando from p/ postar?

Sim! Somente o atributo que será setado é da classe!!!

leoramos

Cara, exemplo não tenho, mas coloca ele antes do nome da entidade, nada demais. Não lembro a versão da documentação que eu vi, eu tenho todas aqui e não vi qual eu abri o.0 mas não deve variar isso não… eu “acho”.

Com SQL nativa é mole… mas me diz, como estás acessando os outros atributos? Posta o teu mapeamento (as classes, no caso) pra gente conferir, ao que parece pelo respondido na outra thread, é algo a ser revisto.

rodrigo.fai

leoramos:
Cara, exemplo não tenho, mas coloca ele antes do nome da entidade, nada demais. Não lembro a versão da documentação que eu vi, eu tenho todas aqui e não vi qual eu abri o.0 mas não deve variar isso não… eu "acho".

Com SQL nativa é mole… mas me diz, como estás acessando os outros atributos? Posta o teu mapeamento (as classes, no caso) pra gente conferir, ao que parece pelo respondido na outra thread, é algo a ser revisto.

Coloquei o "from" antes da entidade e continua dando erro!

O código ficou assim depois da alteração:

sql.append(" update from Projeto as proj set proj.status = :status ");
        sql.append(" where proj.acaoAtividadeDaRelacaoDeIntencao.numeroDoGrupoModular = :grupoModular ");
        sql.append(" and proj.acaoAtividadeDaRelacaoDeIntencao.acaoAtividade.numeroDoModulo > :numeroModulo ");
R

leoramos:
Sim, que não se usa eu sei, mas na verdade updates ‘puros’ nem são a cara do hibernate. Se tu colocar o from ele funciona também, na realidade… não está ‘errado’, digamos assim, peca-se pelo excesso (pelo menos foi isso que eu vi AGORA na documentação hehe).
O fato é que quando tu usa ‘from’ ele vai limitar a um tipo, então creio que ele não coloque a vírgula. Mas pelo que vi na outra thread, esses atributos nem são dessa classe, né?

Vc está dizendo que pode ser feito um select sem o from? Como ficaria? Eu acho que isso não é possível.
O que vc pode tirar é o select, e não o from. A não ser que vc esteja falando de um update, que pode ser feito com hql tb.

session.createQuery("update Produto p set p.nome='a' where id = 1").executeUpdate();

O select ficaria assim:

session.createQuery("from Produto p where p.id = 1").list();

Eu me esqueci de colocar o alias e depois usar ele no where.

leoramos

riccaio:
leoramos:
Sim, que não se usa eu sei, mas na verdade updates ‘puros’ nem são a cara do hibernate. Se tu colocar o from ele funciona também, na realidade… não está ‘errado’, digamos assim, peca-se pelo excesso (pelo menos foi isso que eu vi AGORA na documentação hehe).
O fato é que quando tu usa ‘from’ ele vai limitar a um tipo, então creio que ele não coloque a vírgula. Mas pelo que vi na outra thread, esses atributos nem são dessa classe, né?

Vc está dizendo que pode ser feito um select sem o from? Como ficaria? Eu acho que isso não é possível.
O que vc pode tirar é o select, e não o from. A não ser que vc esteja falando de um update, que pode ser feito com hql tb.

session.createQuery("update Produto p set p.nome='a' where id = 1").executeUpdate();

O select ficaria assim:

session.createQuery("from Produto p where p.id = 1").list();

Eu me esqueci de colocar o alias e depois usar ele no where.

Não, não foi isso que eu quis dizer não… é que vi um lance sobre limitação de entidade usando ‘from’ para updates na documentação do maledeto do Hibernate, não tem nada a ver com select não.

Como eu falei, para o caso acima eu usaria SQL nativo.

R

Mas por que usar sql nativo pra um update? Eu não vejo vantagens. Eu prefiro usar o sql nativo quando for alguma coisa muito específica ou quando eu precisar de muita performance.

leoramos

Dá uma olhada na documentação do hibernate sobre update em lote, o material é bem rico nesse sentido. A própria documentação assume que updates dessa forma pelo hibernate são mancos.

R

Eu não achei na documentação onde diz que update em lote são “mancos”.
Vc poderia me mandar o link de onde vc viu isso?

leoramos

É um pdf, cara… e ‘manco’ foi maneira de dizer, né? hehe
Eu cato no meio desse monte de pdfs.

(mas sim, updates e deletes em lotes sequer são o foco do hibernate, isso já é sabido de longa data)

R

Eu sei que “manco” foi maneira de dizer. Por isso que eu coloquei entre aspas o que vc disse.

Cara, eu procurei na documentação e no google e não achei nada falando que as operações em batch são problemáticas.
Se vc achar o link ou alguma coisa dizendo, por favor mande ai.

leoramos

Não é que são problemáticas, é só que não é o foco do Hibernate, então nada é 100% ‘correto’, digamos assim.
O que tem de melhor ou mais aceito é porquê virou padrão de fato, por uso. Manual do Hibernate tem isso, versão 3.
Abraço!

R

Como assim não é o foco do Hibernate. Isso tá na especificação.
Veja esse link, que fala sobre isso:
http://relation.to/Bloggers/BulkOperations

leoramos

Dá uma lida exatamente no link que me passasse.
A especificação prevê update em lote para apenas uma classe (o que significa, por exemplo, que instruções update que necessitem selects em outra tabela na cláusula where já não funcionam).
Entendeu o que eu quis dizer que ‘não é o foco’? O update e delete no hibernate servem para alterar estados de uma entidade no banco. O que é feito em lote, inclusive, é muito menos eficiente (falando de velocidade) que fazer o SQL no braço.

R

Ainda não entendi o que vc quis dizer com não é o foco. O Hibernate implementa a JPA, uma especificação.
Quando vc diz que o “update e delete no hibernate servem para alterar estados de uma entidade no banco”, é isso mesmo que ele tem que fazer, alterar o banco.

E por que com HQL seria menos eficiente que SQL? O HQL gera SQL, normal.

leoramos

Eu sei disso… mas acho que tu não pegou o conceito.

Alterar o estado da entidade NÃO É equivalente a alterar o banco.

O SQL que o Hibernate gera a partir da HQL nem sempre é igual ao SQL mais performático que terias. Sugiro que leias a especificação e a documentação do Hibernate, vai ficar mais clara a diferença pra ti. Não tá fluindo, pelo visto.

Abraço!

R

Em nenhum momento eu falei que alterar a base é a mesma coisa que alterar o estado lógico de objetos.
Eu falei que quando vc dispara um hql com uma operação em batch, ele tem que atualizar a base.
Eu concordo com vc que isso não irá alterar os estados dos objetos que o hibernate gerencia.

Eu tb sei que o sql que o Hibernate gera nem sempre é igual ao SQL mais performático, mas para operações de update e delete geralmente não vai ter muita diferença (não que eu saiba). Se fosse select eu concordaria com vc.

Eu leio sim a documentação e a especificação, e ainda acho que o que estou falando está correto.

Abraço.

Criado 25 de agosto de 2009
Ultima resposta 26 de ago. de 2009
Respostas 32
Participantes 4