Hibernate Atributo "Formula"

1 resposta
C

Pessoal tenho o Seguinte arquivo de mapeamento,

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping
     PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

     <hibernate-mapping package="entidade">
     
        <class name="Produto" table="produto" >
        
           <id name="codigo">
              <generator class="assigned"/>
           </id>
           
           <property name="codigoSe" type="integer" column="codigoSe" formula="(select Coalesce(Max(p.codigoSe),0)+1 from produto p)"/>
           <property name="descricao"/>
           <property name="quantidade"/>
           <property name="valorCompra"/>
           <property name="percentual"/>
           <property name="tamanho"/>
           <property name="cor"/>
           <property name="tipo"/>
           <property name="observacao"/>
           
           <many-to-one name="fornecedor" class="Fornecedor" column="fornecedor" lazy="false"/>
        
        </class>
     
     </hibernate-mapping>

Está dando o seguite erro. Isso aconteceu depois que usei o atributo fórmula.

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Hibernate: insert into produto (descricao, quantidade, valorCompra, percentual, tamanho, cor, tipo, observacao, fornecedor, codigo) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update
	at org.hibernate.exception.ErrorCodeConverter.handledNonSpecificException(ErrorCodeConverter.java:92)
	at org.hibernate.exception.ErrorCodeConverter.convert(ErrorCodeConverter.java:80)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:181)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:226)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:136)
	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:274)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:730)
	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:324)
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:86)
	at dao.HibernateDAOProduto.gravar(HibernateDAOProduto.java:80)
	at controle.FacadeProduto.gravar(FacadeProduto.java:36)
	at controle.Teste.main(Teste.java:25)
Caused by: java.sql.BatchUpdateException: Field 'codigoSe' doesn't have a default value
	at com.mysql.jdbc.ServerPreparedStatement.executeBatch(ServerPreparedStatement.java:647)
	at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:57)
	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:174)
	... 10 more

Alguém poderia me ajudar?

Obrigado!

1 Resposta

Feijao

Cara, você está querendo inserir o codigoSe na sua tabela simplesmente adicionando 1 ao máximo valor da mesma coluna nessa tabela.

O formula não serve pra isso, ele é uma fórmula para um atributo que não possui coluna mapeada no banco, ela serve para você trazer um campo através de alguma regra que você impõe no SQL.

Para inserir no banco da maneira que você quer ainda é um mistério para mim também, estou tentando achar a solução.

Criado 20 de dezembro de 2006
Ultima resposta 4 de mar. de 2007
Respostas 1
Participantes 2