Ajuda Com Hibernate "Iniciante"

3 respostas
L

Pessoal comecei estudar hibernate ontem, estou com pequeno problema.

Está dando esse erro na compilação!!

Out 03, 2012 5:48:37 PM org.hibernate.annotations.common.Version 

INFO: HCANN000001: Hibernate Commons Annotations {4.0.1.Final}

Out 03, 2012 5:48:37 PM org.hibernate.Version logVersion

INFO: HHH000412: Hibernate Core {4.1.6.Final}

Out 03, 2012 5:48:37 PM org.hibernate.cfg.Environment 

INFO: HHH000206: hibernate.properties not found

Out 03, 2012 5:48:37 PM org.hibernate.cfg.Environment buildBytecodeProvider

INFO: HHH000021: Bytecode provider name : javassist

Out 03, 2012 5:48:37 PM org.hibernate.cfg.Configuration configure

INFO: HHH000043: Configuring from resource: /hibernate.cfg.xml

Out 03, 2012 5:48:37 PM org.hibernate.cfg.Configuration getConfigurationInputStream

INFO: HHH000040: Configuration resource: /hibernate.cfg.xml

Out 03, 2012 5:48:37 PM org.hibernate.internal.util.xml.DTDEntityResolver resolveEntity

WARN: HHH000223: Recognized obsolete hibernate namespace <a href="http://hibernate.sourceforge.net/">http://hibernate.sourceforge.net/</a>. Use namespace <a href="http://www.hibernate.org/dtd/">http://www.hibernate.org/dtd/</a> instead. Refer to Hibernate 3.6 Migration Guide!

Out 03, 2012 5:48:37 PM org.hibernate.cfg.Configuration doConfigure

INFO: HHH000041: Configured SessionFactory: null

Out 03, 2012 5:48:38 PM org.hibernate.mapping.RootClass checkCompositeIdentifier

WARN: HHH000038: Composite-id class does not override equals(): aluno

Out 03, 2012 5:48:38 PM org.hibernate.mapping.RootClass checkCompositeIdentifier

WARN: HHH000039: Composite-id class does not override hashCode(): aluno

Exception in thread “main” org.hibernate.MappingException: Composite-id class must implement Serializable: aluno

at org.hibernate.mapping.RootClass.checkCompositeIdentifier(RootClass.java:290)

at org.hibernate.mapping.RootClass.validate(RootClass.java:279)

at org.hibernate.cfg.Configuration.validate(Configuration.java:1294)

at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1738)

at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1784)

at GravaAluno.main(GravaAluno.java:16)

//

XML para configuraçao

<?xml version="1.0" encoding="UTF-8"?>
<property name ="connection.Driver_class"> org.postgresql.Driver</property>
  <property name ="connection.url">jdbc:postgresql://localhost/JavaHibernate </property>
  <property name = "connection.username"> postgres</property> 
  <property name = "connection.password">root</property>  
 
   <property name ="connection.pool_size">1</property>
  
   <property name = "dialect"> org.hibernate.dialect.PostgreSQLDialect</property>  
  
   <property name="show_sql">true</property>
   
  <mapping class="aluno"></mapping>

Abaixo segue As class, Utilizando Banco Postgresql, com todas as columun criadas.

3 Respostas

Hebert_Coelho

Não me entenda mau… Você leu a mensagem de erro?

Vou destacar a parte principal:

alias

O motivo do problema é este:

Exception in thread "main" org.hibernate.MappingException: Composite-id class must implement Serializable: aluno

Vejamos sua classe:

@Entity
@Table(name ="aluno")
public class aluno {


	private int alu_codigo;
	private String alu_nome;
	private String alu_cidade;
	private String alu_fone;
	private String alu_curso;
	
	@Id
	@Column(name= "alu_codigo")
	public int getAlu_codigo() {
		return alu_codigo;
	}
	
	public void setAlu_codigo(int alu_codigo) {
		this.alu_codigo = alu_codigo;
	}
	
	@Id
	@Column(name="alu_nome")
	public String getAlu_nome() {
		return alu_nome;
	}
	
	public void setAlu_nome(String alu_nome) {
		this.alu_nome = alu_nome;
	}
	
	@Id
	@Column(name="alu_cidade")
	public String getAlu_cidade() {
		return alu_cidade;
	}
	
	public void setAlu_cidade(String alu_cidade) {
		this.alu_cidade = alu_cidade;
	}
	
	@Id
	@Column(name="alu_fone")
	public String getAlu_fone() {
		return alu_fone;
	}
	
	public void setAlu_fone(String alu_fone) {
		this.alu_fone = alu_fone;
	}
	
	@Id
	@Column(name="alu_curso")
	public String getAlu_curso() {
		return alu_curso;
	}
	
	public void setAlu_curso(String alu_curso) {
		this.alu_curso = alu_curso;
	}
	
	
}

Realmente há um caso de “composite-id”, visto que voce anotou diversos campos com @Id. Não conheço sua regra de negócio, mas nao me parece razoável que TODOS os campos da sua tabela façam parte da PK. Não seria mais adequado definir um único campo para ser o @Id, como por exemplo o “alu_codigo”?

Aproveitando o gancho…não seria ruim um pequeno estudo das convenções Java (nome da classe iniciando com letra maiúscula, nome de variaveis em camelCase…)

L

Valeu, resolvir. era só tirar as ID, e deixar alu codigo com chave primaria.

Eu sou iniciante, estudo java a 2 meses. Eu conheço o padrão cameCase, na próxima ficarei mais atento.

Criado 3 de outubro de 2012
Ultima resposta 3 de out. de 2012
Respostas 3
Participantes 3