Problemas com busca com criteria

Daniel, nem tirando o Conjunction funcionou…
Mesma coisa…

Não seria isto?:

Criteria crit = session.createCriteria(Consulta.class)  
        .createAlias("paciente", "pa")  
        .createAlias("medico", "m") ;
        Criterion paciente = Restrictions.ilike("pa.pessoa.nome", consulta.getPaciente().getPessoa().getNome(), MatchMode.ANYWHERE);  
        Criterion medico = Restrictions.ilike("m.pessoa.nome", consulta.getMedico().getPessoa().getNome(), MatchMode.ANYWHERE);  
.
.
.

Fala cinei!
Antes tava assim, mas ele não vai porque se eu não referenciar um alias para “medico.pessoa” e um para “paciente.pessoa” ele referencia pessoa como um atributo da classe Consulta. aí aparece o seguinte erro:

could not resolve property: pessoa of: br.com.sisclinic.model.Consulta

Depois que eu criei os alias para médico e paciente com pessoa, ele não da mais erro, mas em compensação ele não trás o resultado da busca… ele retorna vazio… sacou??

abraços!

Você está certo. Critéria é meio chatinho.
Tenta:

 .createAlias("paciente.pessoa", "pp")    
 .createAlias("medico.pessoa", "mp") ; 
Criterion paciente = Restrictions.ilike("pp.nome", consulta.getPaciente().getPessoa().getNome(), MatchMode.ANYWHERE);  
Criterion medico = Restrictions.ilike("mp.nome", consulta.getMedico().getPessoa().getNome(), MatchMode.ANYWHERE);
.
.
.

Talvez reclame por aparecer a entidade pessoa duas vezes. Eu não posso testar aqui.

pois é… tentei assim também… não entendo, se eu remover o alias e paciente e medico e deixar só medico.pessoa e paciente.pessoa ele apresenta erro dizendo que não foi possível executar a query!

realmente não tenho nem ideia do que possa ser isso!

abraços

Veja se não há problema no seu banco.
Talvez haja médico ou paciente na consulta sem a pessoa correspondente, o que seria um erro de constraint

Já conferi já! ta tudo certinho!

Dê uma olha e adapte se precisar. Uma sugestão simplificada.

Criteria crit = session.createCriteria(Consulta.class)

if(!consulta.getPaciente().getPessoa().getNome().isEmpty()) {  
	crit.createAlias("paciente.pessoa", "pp")  
	crit.add(Restrictions.ilike("pp.nome", consulta.getPaciente().getPessoa().getNome()));
}
           
if(!consulta.getMedico().getPessoa().getNome().isEmpty()) {  
	crit.createAlias("medido.pessoa", "mp")  
	crit.add(Restrictions.ilike("mp.nome", consulta.getMedico().getPessoa().getNome()));
}
return crit.list();

Vou testar aqui e já já posto aqui!

Cinei, adaptei aqui, mas continua na mesma… ele não trás nada.

	@SuppressWarnings("unchecked")
	public List<Consulta> buscaConsultas(Consulta consulta) {
		Criteria crit = session.createCriteria(Consulta.class);
		
		if(!consulta.getPaciente().getPessoa().getNome().isEmpty()) {
			crit.createAlias("paciente", "p");
			crit.createAlias("paciente.pessoa", "pp");
			crit.add(Restrictions.ilike("pp.nome", consulta.getPaciente().getPessoa().getNome(), MatchMode.ANYWHERE));
		}
		
		if(!consulta.getMedico().getPessoa().getNome().isEmpty()) {
			crit.createAlias("medico", "m");
			crit.createAlias("medico.pessoa", "mp");
			crit.add(Restrictions.ilike("mp.nome", consulta.getMedico().getPessoa().getNome(), MatchMode.ANYWHERE));
		}
		
		return crit.list();
	}

tenho certeza que é alguma bobeira que ta atrapalhando tudo! pq não é possível! o banco está certo, o médico está certo!

Estava pensando aqui, será que pode ser alguma anotação aqui que eu usei errada?

Não precisa das linhas:

 crit.createAlias("paciente", "p");
...
crit.createAlias("medico", "m"); 

precisa sim! é o mesmo lance daquele caso anterior… se eu não referencio nem médico nem paciente, ele diz que não é possível executar a query =//

Tem um problema no seu mapeamento de pessoa:

public class Pessoa implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "id_pessoa")
	private Long id;
	
	private String nome;
	private String cpf;
	private String identidade;
	
	@Temporal(TemporalType.DATE)
	@DateTimeFormat(pattern = "dd/MM/yyyy")
	@Column(name = "data_nascimento")
	private Date dataNascimento;
	
	private String endereco;
	private String complemento;
	private String cidade;
	private String estado;
	private String pais;
	private String cep;
	private String telefone;
	private String celular;
	private String email;

	public Pessoa(Long id, String nome, String cpf, String identidade,
			Date dataNascimento, String endereco, String complemento,
			String cidade, String estado, String pais, String cep,
			String telefone, String celular, String email) {
		super();
		this.id = id;
		this.nome = nome;
		this.cpf = cpf;
		this.identidade = identidade;
		this.dataNascimento = dataNascimento;
		this.endereco = endereco;
		this.complemento = complemento;
		this.cidade = cidade;
		this.estado = estado;
		this.pais = pais;
		this.cep = cep;
		this.telefone = telefone;
		this.celular = celular;
		this.email = email;
	}

	public Pessoa() {}

Por que as colunas nome e CPF e identidade não estão mapeadas?