fala galera bom dessa vez eu venho com uma duvida um pouco + avançada q o de costume(ou pelo menos, menos ridicula)
estou tentando fazer um exercício que vi na internet + não estou conseguindo fazer o mapeamento(somente este os outros consegui numa boa)
no hospital o paciente pode ter mais de um d 1 plano de saúde por razões q ainda desconheço(e não concordo) o paciente nunca pode ter o msm plano 2 vezes ou seja chave composta (idPaciente, idPlano), o exercico especifica q deve ser usado chave composta, e tb deve ser classe composta pois tem atributos q pertence somente a ela como inicio, ativo, e outras coisas o exercício lista
pois bem, procurei no google e achei vários tutoriais e achei 3 formas de se fazer, em todas elas o inicio era basicamente o mesmo criar uma classe com os objetos(um deles como os atributos q formam a chave) e fiz todas elas porem basicamente deu o msm erro
FORMA 1 (com objeto):
public class PlanoPacientePK implements Serializable{
@ManyToOne
@JoinColumn(name="plano_id")
private Plano plano;
@ManyToOne
@JoinColumn(name="paciente_id")
private Paciente paciente;
//construtores + gets + sets + hashCode + equals
}
@Entity
@Table
public class PlanoPaciente implements Serializable{
@EmbeddedId
private PlanoPacientePK id;
//construtores + gets + sets + hashCode + equals
public Paciente getPaciente() {
return this.id.getPaciente();
}
public void setPaciente(Paciente p) {
this.id.setPaciente(p);
}
public Plano getPlano() {
return id.getPlano();
}
public void setPlano(Plano p) {
this.id.setPlano(p);
}
}[/code]
FORMA 2 (com objeto):
[code]public class PlanoPacientePK implements Serializable{
@ManyToOne
private Plano plano;
@ManyToOne
private Paciente paciente;
//construtores + gets + sets + hashCode + equals
}
@Entity
@Table
@AssociationOverrides({
@AssociationOverride(name = "id.plano" , joinColumns = @JoinColumn(name = "plano_id")),
@AssociationOverride(name = "id.paciente", joinColumns = @JoinColumn(name = "paciente_id"))
})
public class PlanoPaciente implements Serializable{
@EmbeddedId
private PlanoPacientePK id;
//construtores + gets + sets + hashCode + equals
public Paciente getPaciente() {
return this.id.getPaciente();
}
public void setPaciente(Paciente p) {
this.id.setPaciente(p);
}
public Plano getPlano() {
return id.getPlano();
}
public void setPlano(Plano p) {
this.id.setPlano(p);
}
}
FORMA 3 (com atributo *_id):
public class PlanoPacientePK implements Serializable{
private Integer idPlano;
private Integer idPaciente;
//construtores + gets + sets + hashCode + equals
}
@Entity
@Table
public class PlanoPaciente implements Serializable{
@EmbeddedId
private PlanoPacientePK id;
//construtores + gets + sets + hashCode + equals
public Paciente getPaciente() {
return paciente;
}
public void setPaciente(Paciente paciente) {
this.paciente = paciente;
}
public Plano getPlano() {
return plano;
}
public void setPlano(Plano plano) {
this.plano = plano;
}
sendo q a 3ª forma faz o mapeamento errado, pois alem de criar as chaves compostas ele tb cria os atributos idPlano e idPaciente
as outras 2 formas mapeiam certinho
porem quando eu tento
Criteria crit = hibernateSession.createCriteria(PlanoPaciente.class, “p”);
List lista = (ArrayList) crit.list();
crit.add(Restrictions.eq(“p.plano.tipo”, tipo)) //tipo é uma varivel sendo passada por parametro para selecionar planos de um determinado tipo
exibe o seguinte erro em cada um das formas
Forma1: [color=red] Exception: org.hibernate.QueryException: could not resolve property: paciente of: model.PlanoPaciente [/color]
Forma2: [color=red] Exception: org.hibernate.QueryException: could not resolve property: paciente of: model.PlanoPaciente [/color]
Forma3: [color=red] Exception: org.hibernate.QueryException: could not resolve property: plano.nome of: model.PlanoPaciente [/color]