Olá pessoal, mexendo aqui no Hibernate me surgiu a necessidade de persistir @Enum,
ai vc vai dizer, óhhh, mas é muito facil… foi o que eu tambem deduzi procurando no google
e lendo os docs do Hibernate…
depois de nao funcionar por várias maneiras diferentes e teste resolvi procurar no forum GUJ…
e adivinha??? achei minha resposta exata neste post
http://www.guj.com.br/posts/list/61182.java#321357
Só pra variar, aqui ela nao funciona, será que alguem consegue ver onde está o erro?
meu Bean historico simples de tudo… só pra lembrar no DB (postgres) o campo HISENTRADASAIDA é CHAR(1)
@Entity
@Table(name="HISTORICO")
public class Historico extends com.erp.bean.Entity {
private static final long serialVersionUID = 1L;
@Id
@Column(name="ID", insertable=true, updatable=false)
private Integer id;
@Column(name="HISDESCRICAO", insertable=true, updatable=true)
private String nome;
@Enumerated(EnumType.STRING)
@Column(name="HISENTRADASAIDA", insertable=true, updatable=false)
private TipoFinanceiro tipo;
//Get e Set omitidos, deixe do Enum que segue abaixo...
public TipoFinanceiro getTipo() {
return this.tipo;
}
public void setTipo(TipoFinanceiro tipo) {
this.tipo = tipo;
}
}
Meu Enum TipoFinanceiro lindo e formoso…
public enum TipoFinanceiro {
ENTRADA('E'),
SAIDA('S');
private Character tipo;
private TipoFinanceiro(Character aTipo){
this.tipo = aTipo;
}
public String toString() {
return tipo.toString();
}
public boolean isEntrada(){
return this==ENTRADA;
}
public boolean isSaida(){
return this==SAIDA;
}
public Character getAsChar(){
return this.isEntrada()?'E':'S';
}
}
Enfim o ERRO ao persisitr, como no post citado… ele ainda está jogando o nome do Enum mesmo após eu ter implementado o
override toString() do enum… linha 21
Hibernate:
insert
into
HISTORICO
(HISDESCRICAO, HISENTRADASAIDA, ID)
values
(?, ?, ?)
org.hibernate.exception.DataException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:77)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:253)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at com.erp.dao.HistoricoDAO.insert(HistoricoDAO.java:19)
at com.erp.app.AppEnumDAO.main(AppEnumDAO.java:17)
Caused by: java.sql.BatchUpdateException: Entrada em lote 0 insert into HISTORICO (HISDESCRICAO, HISENTRADASAIDA, ID) values (RECEBIMENTO, ENTRADA, 2) foi abortada. Chame getNextException para ver a causa.
at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2537)
at org.postgresql.core.v3.QueryExecutorImpl$1.handleError(QueryExecutorImpl.java:403)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1328)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:351)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2674)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246)
... 9 more
o hibernate persiste blz, com o Tipo sendo Character… tambem pensei em deixa Enum @Transient e criar um atributo privato Character e fazer um metodo anotando como @PrePersist… mas é que tenho varios enums nesse estilo como Char no BD com Check constraint`s
será que sou tao burro assim :?: :oops:
HOSIuhOSIhoISHoiHSoiHSOIH
zueiras a parte,
Obrigado desde já pessoal…