Relacionamento no Hibernate

5 respostas
D

Boa Tarde pessoal, estou com umas dúvidas referente ao relacionamento de tabelas no Hibernate, minha dúvida é o seguinte. Estou fazendo um sisteminha bem simples Bancário.
Possuo um Banco e uma Agencia, onde um Banco pode ter várias Agencias e uma Agencia apenas um Banco, assim como que ficaria as classes?

Eu fiz assim mas não sei se tá certo.

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "dbo.Banco")
public class Banco {
	@Id
	private int numeroBanco;
	private String nomeBanco;
	
	public Banco(int numeroBanco, String nomeBanco) {
		this.numeroBanco = numeroBanco;
		this.nomeBanco = nomeBanco;
	}
	public int getNumeroBanco() {
		return numeroBanco;
	}
	public void setNumeroBanco(int numeroBanco) {
		this.numeroBanco = numeroBanco;
	}
	public String getNomeBanco() {
		return nomeBanco;
	}
	public void setNomeBanco(String nomeBanco) {
		this.nomeBanco = nomeBanco;
	}	
}
package Modelo;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;

@Entity
@Table(name = "dbo.agencia")
public class Agencia {
	@Id
	private int numeroAgencia;
	private String cidade;
	private String estado;
	@OneToMany(mappedBy="Banco")  
	@Cascade(CascadeType.ALL)
	private Banco banco;
	
	public Agencia(){
		
	}
	
	public Agencia(int numeroAgencia, String cidade, String estado, Banco banco) {
		this.numeroAgencia = numeroAgencia;
		this.cidade = cidade;
		this.estado = estado;
		this.banco = banco;
	}

	public int getNumeroAgencia() {
		return numeroAgencia;
	}

	public void setNumeroAgencia(int numeroAgencia) {
		this.numeroAgencia = numeroAgencia;
	}

	public String getCidade() {
		return cidade;
	}

	public void setCidade(String cidade) {
		this.cidade = cidade;
	}

	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

	public Banco getBanco() {
		return banco;
	}

	public void setBanco(Banco banco) {
		this.banco = banco;
	}


}

Como que ficaria o relacionamento.
Obrigado.

5 Respostas

B

Assim ficaria mais correto:

@Entity  
@Table(name = "dbo.Banco")  
public class Banco {

  @OneToMany(mappedBy="banco")
  private List<Agencia> agencias;

 //resto dos métodos e atributos

} 

@Entity  
@Table(name = "dbo.agencia")  
public class Agencia {  

    @ManyToOne
    @JoinColumn(name="id_banco")
    private Banco banco;      

    //resto dos métodos e atributos
}

O possuidor do relacionamento deve ser a entidade que tem muitos…

Abraços…

D

Ao ececutar a classe Banco ele dá um erro.

package Modelo;

import java.util.List;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name = "dbo.Banco")
public class Banco {
	@Id
	private int numeroBanco;
	private String nomeBanco;
	
	@OneToMany(mappedBy="dbo.banco")   
	private List<Agencia> agencias;
	
	public List<Agencia> getAgencias() {
		return agencias;
	}
	public void setAgencias(List<Agencia> agencias) {
		this.agencias = agencias;
	}
	public String getNomeBanco() {
		return nomeBanco;
	}
	public void setNomeBanco(String nomeBanco) {
		this.nomeBanco = nomeBanco;
	}
	public Banco(int numeroBanco, String nomeBanco) {
		this.numeroBanco = numeroBanco;
		this.nomeBanco = nomeBanco;
	}
	public int getNumeroBanco() {
		return numeroBanco;
	}
	public void setNumeroBanco(int numeroBanco) {
		this.numeroBanco = numeroBanco;
	}	
}
package Modelo;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name = "dbo.agencia")
public class Agencia {
	@Id
	private int numeroAgencia;
	private String cidade;
	private String estado;
	@ManyToOne   
    @JoinColumn(name="numeroBanco")   
    private Banco banco;
	
	public Agencia(){
		
	}

	public Agencia(int numeroAgencia, String cidade, String estado, Banco banco) {
		this.numeroAgencia = numeroAgencia;
		this.cidade = cidade;
		this.estado = estado;
		this.banco = banco;
	}

	public int getNumeroAgencia() {
		return numeroAgencia;
	}

	public void setNumeroAgencia(int numeroAgencia) {
		this.numeroAgencia = numeroAgencia;
	}

	public String getCidade() {
		return cidade;
	}

	public void setCidade(String cidade) {
		this.cidade = cidade;
	}

	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

	public Banco getBanco() {
		return banco;
	}

	public void setBanco(Banco banco) {
		this.banco = banco;
	}
	


}
Exception in thread "main" java.lang.ExceptionInInitializerError at Visao.Main.main(Main.java:13) Caused by: org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: Modelo.Banco.agencias[Modelo.Agencia]
B

Como está seu hibernate.cfg.xml ? Esta entidade está declarada lá ?? Pode ser esse o seu problema…

D

Eu uso o hibernate.properties, o acesso ao banco de dados está normal, só dá problema quando coloco esses relacionamentos, na classe banco mesmo eu adicionei vários sem problema no banco de dados antes de fazer o relacionamento.

hibernate.dialect org.hibernate.dialect.SQLServerDialect
hibernate.connection.driver_class com.microsoft.sqlserver.jdbc.SQLServerDriver
hibernate.connection.url jdbc:sqlserver://douglastc-note;databaseName=Java
hibernate.connection.username sa
hibernate.connection.password 3299

B

Poste aí suas classes… Onde você cria seu SessionFactory, onde você faz a persistência, a classe onde deu este erro…para ficar mais fácil do pessoal te ajudar…

Criado 17 de abril de 2010
Ultima resposta 17 de abr. de 2010
Respostas 5
Participantes 2