Ola pessoal do GUJ
ja tenho um bom conhecimento em java e mysql, entaum peguei o tutorial aqui do site para estudar o hibernate, o que eu fiz foi abrir as classes no eclipse e estudei o XML.
bom mas na hora de compilar o programa aparece isso:
ERROR BasicPropertyAccessor:167 - IllegalArgumentException in class: Pessoa, getter method of property: id
org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of Pessoa.id
at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:171)
at org.hibernate.engine.UnsavedValueFactory.getUnsavedIdentifierValue(UnsavedValueFactory.java:44)
at org.hibernate.tuple.PropertyFactory.buildIdentifierProperty(PropertyFactory.java:44)
at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:123)
at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:434)
at org.hibernate.persister.entity.JoinedSubclassEntityPersister.<init>(JoinedSubclassEntityPersister.java:91)
at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:58)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:226)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1294)
at HibernateUtility.<clinit>(HibernateUtility.java:10)
at Main.main(Main.java:13)
Caused by: java.lang.IllegalArgumentException: object is not an instance of declaring class
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.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:145)
... 10 more
java.lang.NullPointerException
at HibernateUtility.getSession(HibernateUtility.java:18)
at Main.main(Main.java:13)
Exception in thread "main"
maceleta,
Pelo visto parece algum problema com o metodo get da propriedade id. Coloque ai a sua classe e a xml de configuração (pessoa.xml)
Caso, você esteja começando com o Hibernate, aconselho a olhar o Hibernate Annotations
http://www.hibernate.org/hib_docs/annotations/reference/en/pdf/hibernate_annotations.pdf
fsquadro,
valew pela resposta.
bom ta ai o q vc me pediu e obrigado pela dica do PDF
o XML:
<?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>
<class name="Pessoa">
<!-- Identificador da classe -->
<id name="id">
<generator class="increment"/>
</id>
<!-- Propriedades da classe -->
<property name="nome"/>
<property name="telefone"/>
<property name="email"/>
<!-- Relacionamento da classe -->
<one-to-one
name="endereco"
class="Endereco"
cascade="save-update"/>
</class>
</hibernate-mapping>
e a Classe:
public class Pessoa {
private String nome;
private String email;
private String telefone;
private Endereco endereco;
private Integer id;
/**
* @return Returns the id.
*/
public Integer getId() {
return id;
}
/**
* @param id The id to set.
*/
public void setId(Integer id) {
this.id = id;
}
/**
* @return Returns the email.
*/
public String getEmail() {
return email;
}
/**
* @param email The email to set.
*/
public void setEmail(String email) {
this.email = email;
}
/**
* @return Returns the endereço.
*/
public Endereco getEndereco() {
return endereco;
}
/**
* @param endereço The endereço to set.
*/
public void setEndereco(Endereco endereco) {
this.endereco = endereco;
}
/**
* @return Returns the nome.
*/
public String getNome() {
return nome;
}
/**
* @param nome The nome to set.
*/
public void setNome(String nome) {
this.nome = nome;
}
/**
* @return Returns the telefone.
*/
public String getTelefone() {
return telefone;
}
/**
* @param telefone The telefone to set.
*/
public void setTelefone(String telefone) {
this.telefone = telefone;
}
}
maceleta,
Você declarou o mapeamento no hibernate.cfg.xml?
<mapping resource="pessoa.hbm.xml"/>
Verifique isso, como você está começando, e como já tinha mencionado para você quem sabe dar uma olhada no Hibernate Annotation, eu vou colocar abaixo como ficaria o mapeamento com o Annotations. Eu não cheguei a testar, mas acredito que esteja Ok.
[EDITADO]
@Entity(name="Pessoa")
// Nome da tabela
@Table(name="tb_pessoa")
// Indica que uma sequence será criada, e define o nome dela
@SequenceGenerator(name = "seq_pessoa", sequenceName = "seq_pessoa")
public class Pessoa {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_pessoa")
@Column(name="id_pessoa", nullable=false, unique=true)
private Integer id;
@Column(name="txt_nome", nullable=false, length=255)
private String nome;
@Column(name="txt_email", nullable=false, length=255)
private String email;
@Column(name="txt_telefone", nullable=false, length=255)
private String telefone;
@OneToOne(cascade = CascadeType.ALL)
private Endereco endereco;
//getters and setters
}
Espero ter ajudado.