[ Hibernate ] Consegui mapear entidades mas me digam o que seria isso

10 respostas
H

tenho duas tabelas

Clientes ( cod_cli, nome )

Vendas ( cod_venda, cod_cli, … )

já consegui mapear one-to-many de clientes pra vendas mas o hibernate ta dizendo que eu tenho q ter um setVendas e um getVendas na classe clientes… n entendi nada…

por favor hibernators de plantão da um help ai

16:46:31,289 DEBUG AbstractEntityPersister:2755 -  Update 0: /* update vendas.Vendas */ update vendas set cod_cli=?, data_venda=?, data_recebimento=?, valor=?, situacao=?, data_pg=? where cod_venda=?
16:46:31,289 DEBUG AbstractEntityPersister:2756 -  Delete 0: /* delete vendas.Vendas */ delete from vendas where cod_venda=?
Nao foi possivel criar factory org.hibernate.PropertyNotFoundException: Could not find a getter for vendas in class clientes.Clientes
Exception in thread "main" java.lang.ExceptionInInitializerError
	at util.HibernateUtil.<clinit>(HibernateUtil.java:20)
	at vendas.VendasDao.listaVendas(VendasDao.java:10)
	at principal.Principal.main(Principal.java:11)
Caused by: org.hibernate.PropertyNotFoundException: Could not find a getter for vendas in class clientes.Clientes
	at org.hibernate.property.BasicPropertyAccessor.createGetter(BasicPropertyAccessor.java:282)
	at org.hibernate.property.BasicPropertyAccessor.getGetter(BasicPropertyAccessor.java:275)
	at org.hibernate.mapping.Property.getGetter(Property.java:272)
	at org.hibernate.tuple.entity.PojoEntityTuplizer.buildPropertyGetter(PojoEntityTuplizer.java:247)
	at org.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:125)
	at org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:55)
	at org.hibernate.tuple.entity.EntityEntityModeToTuplizerMapping.<init>(EntityEntityModeToTuplizerMapping.java:56)
	at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:302)
	at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:434)
	at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:109)
	at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:55)
	at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:226)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1300)
	at util.HibernateUtil.<clinit>(HibernateUtil.java:15)

10 Respostas

T

vc tem um objeto Vendas no seu cliente? Existe método get para ele?

fiaux

Como é o relacionamento entre Cliente e Vendas?

T

para dizer a verdade o relacionamento entre cliente e vendas é no mínimo duvidoso… rsrsrs

netShot

posta suas classes que fica mais facil.

um exemplo simples seria :

@OneToMany(cascade = CascadeType.ALL, mappedBy = "idCliente")
    private Set<Vendas> clienteVendas= new HashSet<Vendas>();

   // gets e sets bla bla
H

Classe Clientes

package clientes;

public class Clientes {
	private int id;
	private String nome;
		
	public Clientes()
	{
		
	}
	
	public int getId() {
		return id;
	}


	public void setId(int id) {
		this.id = id;
	}


	public String getNome() {
		return nome;
	}


	public void setNome(String nome) {
		this.nome = nome;
	}
}

Classe Vendas

package vendas;

public class Vendas {
	private int id;
	private int idcliente;	
	private java.util.Date datavenda;
	private java.util.Date datarecebimento;
	private double valor;
	private String situacao;
	private java.util.Date data_pg;
	
	public Vendas()
	{
		
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public int getIdcliente() {
		return idcliente;
	}

	public void setIdcliente(int idcliente) {
		this.idcliente = idcliente;
	}

	public java.util.Date getDatavenda() {
		return datavenda;
	}

	public void setDatavenda(java.util.Date datavenda) {
		this.datavenda = datavenda;
	}

	public java.util.Date getDatarecebimento() {
		return datarecebimento;
	}

	public void setDatarecebimento(java.util.Date datarecebimento) {
		this.datarecebimento = datarecebimento;
	}

	public double getValor() {
		return valor;
	}

	public void setValor(double valor) {
		this.valor = valor;
	}

	public String getSituacao() {
		return situacao;
	}

	public void setSituacao(String situacao) {
		this.situacao = situacao;
	}

	public java.util.Date getData_pg() {
		return data_pg;
	}

	public void setData_pg(java.util.Date data_pg) {
		this.data_pg = data_pg;
	}
}

Banco de dados

clientes ( cod_cli (pk), nome )
vendas ( cod_venda (pk), cod_cli (fk), datavenda, datarecebimento, valor, situacao, data_pg )

Vendas.hbm.xml

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

<hibernate-mapping>
	<class name="vendas.Vendas" table="vendas">
		<id name="id" column="cod_venda" type="int">
			<generator class="assigned" />
		</id>
		<property name="idcliente" type="int" column="cod_cli" />
		<property name="datavenda" type="date" column="data_venda" />
		<property name="datarecebimento" type="date" column="data_recebimento" />
		<property name="valor" type="double" column="valor" />
		<property name="situacao" type="string" column="situacao" />
		<property name="data_pg" type="date" column="data_pg" />		
	</class>
</hibernate-mapping>

Clientes.hbm.xml

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

<hibernate-mapping>
	<class name="clientes.Clientes" table="clientes">
		<id name="id" column="cod_cli">
			<generator class="native" />
		</id>
		<property name="nome" type="string" column="nome" />
		
		<set name="vendas" table="vendas">
        	<key column="cod_cli"/>
        	<one-to-many class="vendas.Vendas"/>
    	</set>
	</class>
</hibernate-mapping>

pq seria duvidoso o relacionamento?

1 cliente tem muitas vendas

one-to-many

E

heliortf,

Pela sua lógica, um cliente possui varias vendas, porém nas suas classes isso não esta se refletindo.

Assim, na sua classe cliente, deve ter um atributo Vendas com seus gets e sets e na classe Vendas, seria retirado o atributo de Cliente.

Não sei se você entendeu, mas se achar melhor eu posto o codigo das suas classes modificadas.

abraços

H

eh… nao entendi…

se nao for pedir muito da sua paciencia, gostaria q postasse o código sim…

obrigado

E

Vamos la,

A sugestão é a seguinte:

Classe Cliente

package clientes;

public class Clientes {
	private int id;
	private String nome;
        private Vendas vendas;
		
	public Clientes()
	{
		
	}
	
	public int getId() {
		return id;
	}


	public void setId(int id) {
		this.id = id;
	}


	public String getNome() {
		return nome;
	}


	public void setNome(String nome) {
		this.nome = nome;
	}

       public void setVendas(Vendas vendas){
               this.vendas = vendas;
       }

       public Vendas getVendas(){
               return this.vendas;
       }
}

Classe vendas

package vendas;

public class Vendas {
	private int id;
	private java.util.Date datavenda;
	private java.util.Date datarecebimento;
	private double valor;
	private String situacao;
	private java.util.Date data_pg;
	
	public Vendas()
	{
		
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public java.util.Date getDatavenda() {
		return datavenda;
	}

	public void setDatavenda(java.util.Date datavenda) {
		this.datavenda = datavenda;
	}

	public java.util.Date getDatarecebimento() {
		return datarecebimento;
	}

	public void setDatarecebimento(java.util.Date datarecebimento) {
		this.datarecebimento = datarecebimento;
	}

	public double getValor() {
		return valor;
	}

	public void setValor(double valor) {
		this.valor = valor;
	}

	public String getSituacao() {
		return situacao;
	}

	public void setSituacao(String situacao) {
		this.situacao = situacao;
	}

	public java.util.Date getData_pg() {
		return data_pg;
	}

	public void setData_pg(java.util.Date data_pg) {
		this.data_pg = data_pg;
	}
}

Ta ai, lembramos que é apenas a minha sugestão ok ?

H

ok, mas porque tem q ter um getter e setter do tipo Vendas ?

hibernate exige isso?

E

Na verdade não, mas você pode colocar somente o Id, eu que costumo fazer dessa forma.

Utilizando JPA por exemplo, você somente faria a anotação nesse atributo dizendo que ele é um cara pertecente a tabela x e pronto, ao persistir um cliente no banco, você ja persistiria os dados das vendas juntos, caso o objeto esteja preenchido.

Na verdade é um simplificador, pelo menos na minha opnião, mas se você quiser, poderá fazer somente com o id.

Criado 2 de julho de 2008
Ultima resposta 3 de jul. de 2008
Respostas 10
Participantes 5