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?