Hibernate + PostgreSQL e a Porra do sequence

4 respostas
R

Ola, pessoal...

To com um projeto da faculdade que tenho que desenvolver uma aplicação JEE, usando percistencia com Hibernate, até ai tudo bem;

O postgresql também, não tem problemas tenho sites em PHP, Objetos DAO, que funcionam perfeitamente. Mas usando o Hibernete da a seguinte mensagem.

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
TRANSACAO INICIADA
[b]Hibernate: select nextval ('hibernate_sequence')[/b]
TRANSACAO EFETIVADA

Aparentemente ele executa, mais da esse cara aqui Hibernate: select nextval ('hibernate_sequence'), não sei o que fazer.

O Desenho das Entidades Físicas, estão assim:
[img]http://www.mtclassea.com.br/Estrutura_DB.JPG[/img]

E o meu mapeamento são os seguinte...
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@SequenceGenerator(name="seq", sequenceName="hibernate_sequence")
public abstract class ClienteVO {

	@Id
	@Column(name="idCliente")
	@GeneratedValue(strategy = GenerationType.AUTO, generator="seq")
	private Long id;
	
	private String      nomeCliente;
	private SexoEnum    sexoCliente;
	private Date 	    dataNascimentoCliente;
	private String      numeroNacionalCliente;	
	private TipoCliente tipoCliente;
	private String      loginCliente;
	private String      senhaCliente;
	private String      emailCliente;
	private Date        dataCadastroCliente;
	private StatusEnum  statusCliente;
	private DeleteEnum  deletedCliente;

	@OneToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE})
	@JoinColumn(name="idTelefone")	
	private List<TelefoneVO> listaTelefone;
	
	@OneToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE})
	@JoinColumn(name="idEndereco")		
	private List<EnderecoVO> listaEndereco;
@Entity
@Table(name="\"ClienteFisicoVO\"")
@PrimaryKeyJoinColumn(name = "idCliente")
public class ClienteFisicoVO extends ClienteVO {

	private String rgCliente;
	private String orgaoEmissorCliente;
Executanto
public class ClienteFisico {
	
	
	public static void main(String[] args) {

		ClienteFisicoDAO clienteFisicoDAO = new ClienteFisicoDAO();
		
		ClienteFisicoVO clienteFisicoVO = new ClienteFisicoVO();
		
		clienteFisicoVO.setNomeCliente("Romildo Jozue Paiter");
		clienteFisicoVO.setSexoCliente(SexoEnum.MASCULINO);
		clienteFisicoVO.setTipoCliente(TipoCliente.FISICO);
		clienteFisicoVO.setLoginCliente("rpaiter");
		clienteFisicoVO.setSenhaCliente("1234");
		
		clienteFisicoVO.setDataCadastroCliente(new Date());
		clienteFisicoVO.setStatusCliente(StatusEnum.ATIVO);
		
		clienteFisicoVO.setRgCliente("13017497");
		clienteFisicoVO.setOrgaoEmissorCliente("SSP/MT");
		
		
		try {
		
			HibernateHelper.getInstance().beginTransaction();
			
			Serializable id = clienteFisicoDAO.inserir(clienteFisicoVO);
			
			HibernateHelper.getInstance().commitTransaction();
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}

Hum também quero dizer que eu criei o id da sequencia solicitada no banco.

Estou sem ideia para resolver esse problema será que alguem pode me dar um GRANDE HELP

Valeu pessoal Obrigado.

att

Romildo Paiter

4 Respostas

G

Olá!
Eu tb uso Postgre, tente criar a sequence usando identity:
Exemplo:

@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name="id_imovel")
	private Long idImovel;

Abraço!

R

Ola Guevara, tudo bem..

Olha só, agora pelo menos deu um outro erro
kkk

@
Entity
@Table(name="ClienteVO") //, schema="paiterbrindes"
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class ClienteVO {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name="idCliente")
	private Long id;

Agora esta gerando esse erro

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
TRANSACAO INICIADA
Hibernate: /* insert br.com.paiterbrindes.cope.vo.ClienteFisicoVO */ insert into ClienteVO (dataCadastroCliente, dataNascimentoCliente, deletedCliente, emailCliente, loginCliente, nomeCliente, numeroNacionalCliente, senhaCliente, sexoCliente, statusCliente, tipoCliente) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
org.hibernate.exception.SQLGrammarException: could not insert: [br.com.paiterbrindes.cope.vo.ClienteFisicoVO]
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
	at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:64)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2176)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2656)
	at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71)
	at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
	at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:321)
	at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
	at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
	at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
	at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
	at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:563)
	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:551)
	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:547)
	at br.com.paiterbrindes.cope.app.dao.DAO.inserir(DAO.java:25)
	at br.com.paiterbrindes.cope.app.negocio.ClienteFisico.main(ClienteFisico.java:40)
Caused by: org.postgresql.util.PSQLException: ERRO: relação "clientevo" não existe
  Posição: 71
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2062)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1795)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:479)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:367)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:321)
	at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:94)
	at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:57)
	... 17 more

Que relação é no banco ou no Hibernate

P

A tabela ClienteVO não existe na BD. Pelo que vejo do diagrama acima deveria ser ClientesVO

G

Veja bem, é importante saber como está no banco, pq o ideal é o Hibernate criar as tabelas e as sequences, se vc criar o banco na mão e depois colocar o Hibernate pra ler pode dar zica, pq podemos esquecer de algum detalhe e ai o Hibernate não consegue trabalhar.
Se no banco está apenas id então seria:

Entity
@Table(name="ClienteVO") //, schema="paiterbrindes"
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class ClienteVO {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;

O Column vc usaria apenas se o nome da tabela fosse diferente do nome do atributo, se for diferente vai dar zica com as outras tabelas que estão esperando um idCLiente ou id_cliente, não sei como está o seu banco.
Para facilitar a busca pelo erro, veja como o Hibernate cria as sequences.

Outra coisa, que tipo de tabela é esta?

@Table(name="\"ClienteFisicoVO\"")

Se a sua classe é ClienteFisicoVO deixa a table como:

@Table(name="clientefisicovo")
ou
@Table(name="cliente_fisico_vo")

Aquelas barras lá eu nunca vi alguém colocar numa tabela de banco.
Confira as IDs e o nome das tabelas que vc está colocando.

Criado 7 de maio de 2010
Ultima resposta 7 de mai. de 2010
Respostas 4
Participantes 3