Consulta Tabela Relacionada + Boolean Hibernate

3 respostas
Fmgasparino

Pessoal, estou precisando realizar uma consulta e estou com uma duvida quanto a consulta de objetos relacionados.

Tenho a classe:
@Entity
public class Tratamento {

	@Id @GeneratedValue
	private int id;
	
	Calendar dataEntrada;
	
	@ManyToOne
	Paciente paciente;
	
	private double valor;
	private boolean status;

E preciso retornar todos que tenham o paciente X.

Pensei que fosse:
public List<Tratamento> buscaTratamentos(Paciente paciente) {
		return (List<Tratamento>) this.session.createCriteria(Tratamento.class)
		.add(Restrictions.eq("paciente.id", paciente.getId())).list();
	}

Infelizmente não rolou...
Alguem sabe o que pode estar errado ?

Mais uma coisa, a propriedade status, fica como bit na base. Devo mandar 0 ou 1 ? 0=false e 1=true ?

Valeu!

3 Respostas

kweles

Olá Fmgasparino!

Estou com o mesmo problema, quero pesquisar pelo nome.

Só um detalhe que vi na sua entity tratamento é que vc não especificou por o campo chave
que liga as duas, vc deveria corrigir para isto:

@Entity  
public class Tratamento {  
  
    @Id @GeneratedValue  
    private int id;  
      
    Calendar dataEntrada;  
      
    @ManyToOne  
    @JoinColumn( name="nomeDoCampoChaveNoBancoDeDadosParaoJoinDasTabelas" )   //sera o campo da foreign key, espero que entenda, geralmente id_paciente ou pacienteId
    Paciente paciente;  
      
    private double valor;  
    private boolean status;

desta forma, se vc pesquisasse da forma abaixo ele utilizaria como criterio de pesquisa o Id, mas temos o mesmo problema que queremos a pesquisa pelo nome

public List&lt;Tratamento&gt; buscaTratamentos(Paciente paciente) {  
        return (List&lt;Tratamento&gt;) this.session.createCriteria(Tratamento.class)  
        .add(Restrictions.eq("paciente", paciente)).list();   //ele automaticamente procuraria o id do seu paciente com o id do paciente do tratamento
    }

cara se tiver a reposta me mande, por favor!
[email removido]

Fmgasparino
kweles:
Olá Fmgasparino!

Estou com o mesmo problema, quero pesquisar pelo nome.

Só um detalhe que vi na sua entity tratamento é que vc não especificou por o campo chave
que liga as duas, vc deveria corrigir para isto:

@Entity  
public class Tratamento {  
  
    @Id @GeneratedValue  
    private int id;  
      
    Calendar dataEntrada;  
      
    @ManyToOne  
    @JoinColumn( name="nomeDoCampoChaveNoBancoDeDadosParaoJoinDasTabelas" )   //sera o campo da foreign key, espero que entenda, geralmente id_paciente ou pacienteId
    Paciente paciente;  
      
    private double valor;  
    private boolean status;

desta forma, se vc pesquisasse da forma abaixo ele utilizaria como criterio de pesquisa o Id, mas temos o mesmo problema que queremos a pesquisa pelo nome

public List&lt;Tratamento&gt; buscaTratamentos(Paciente paciente) {  
        return (List&lt;Tratamento&gt;) this.session.createCriteria(Tratamento.class)  
        .add(Restrictions.eq("paciente", paciente)).list();   //ele automaticamente procuraria o id do seu paciente com o id do paciente do tratamento
    }

cara se tiver a reposta me mande, por favor!
[email removido]

kweles, quando não especifico qual nome quero para o campo especifico, ele cria automatico a chave da Entidade relacionada. No meu caso criou paciente_id.
E o meu código acima funcionou, estava com problema na sessão na verdade.

Poderia postar seu código para analisarmos juntos?

Só não descobri como usar o boolean. True e false nao funciona.

Abs

kweles

Olá Meu amigo!

Eu consegui resolver meu problema! Seguindo sua idéia o que eu queria era pesquisar todos os pacientes
do tratamento pelo nome então consegui encontrar a resposta, seria mais ou menos assim:

public List&lt;Tratamento&gt; buscaTratamentos(Paciente paciente) { return (List&lt;Tratamento&gt;) this.session.createCriteria(Tratamento.class) .createCriteria("paciente") .add(Restrictions.like("name", paciente.getName() + "%" )).list(); //ele automaticamente procuraria o id do seu paciente com o id do paciente do tratamento }

No caso eu preciso fazer um novo criteria dentro do principal que é o tratamente, é como se eu estivesse navegando entre as entidades da composição!

Obrigado pela ajuda!

Criado 14 de outubro de 2010
Ultima resposta 14 de out. de 2010
Respostas 3
Participantes 2