0
My View Cad Medico xhtml
<p:selectCheckboxMenu id="multiple"
value="#{medicoBeanView.objetoSelecionado.especialidades}"
label="Especialidades" multiple="true" filter="true"
filterMatchMode="startsWith" panelStyle="width:250px" >
<f:selectItems
value="#{especialidadeBeanView.especialidades}" />
</p:selectCheckboxMenu>
My Converter
@FacesConverter(forClass = Especialidade.class)
public class EspecialidadeConverter implements Converter, Serializable{
private static final long serialVersionUID = 1L;
@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1,
String codigo) { if (codigo != null && !codigo.isEmpty()){
return(Especialidade)
HibernateUtil.getCurrentSession().get(Especialidade.class,
new Long(codigo));
} return codigo; }
@Override
public String getAsString(FacesContext arg0, UIComponent arg1,
Object objeto) {
if (objeto != null){
Especialidade c = (Especialidade) objeto;
return c.getIdEspecialidade() != null && c.getIdEspecialidade() > 0 ?
c.getIdEspecialidade().toString() : null; }
return null;
}
}
Medico Model Mapping
/**
* @author Humberto
*
*/
@Audited
@Entity
@Table(name = "medico")
@SequenceGenerator(name = "medico_seq", sequenceName = "medico_seq", initialValue = 1, allocationSize = 1)
public class Medico implements Serializable {
private static final long serialVersionUID = 1L;
@IdentificaCampoPesquisa(descricaoCampo = "Médico", campoConsulta = "pessoa.pessoaNome", principal = 2)
@JoinColumn(unique=true , referencedColumnName="idPessoa")
@OneToOne(cascade = CascadeType.ALL)
private Pessoa pessoa = new Pessoa();
@IdentificaCampoPesquisa(descricaoCampo = "Código", campoConsulta ="idMedico", principal = 1 )
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "medico_seq")
private Long idMedico;
private String numeroCrm;
//private String[] selecionaEspecialidades;
/*
* private List<String> listaEspecialidades;
*
* @PostConstruct public void getEspecialidades() { listaEspecialidades = new
* ArrayList<String>(); listaEspecialidades.add("Otorrino");
* listaEspecialidades.add("Pediatra");
* listaEspecialidades.add("Cirurgião Vascular");
* listaEspecialidades.add("Cardiologista");
* listaEspecialidades.add("Oftalmologista");
* listaEspecialidades.add("Endocrino"); listaEspecialidades.add("Urologista");
* listaEspecialidades.add("Cirurgião de Membros Superiores"); }
*
*/
@Temporal(TemporalType.DATE)
private Date dataInscricaoCrm;
@Version
@Column(name = "versionNum")
private int versionNum;
@ManyToMany
@JoinTable(name="medico_especialidade",
joinColumns={
@JoinColumn(name="medicoId", referencedColumnName="idMedico")},
inverseJoinColumns={
@JoinColumn(name="especialidadeId", referencedColumnName="idEspecialidade")})
private List<Especialidade> especialidades = new ArrayList<>();
//GETTERS E SETTERS-------------------------
public Long getIdMedico() {
return idMedico;
}
public void setIdMedico(Long idMedico) {
this.idMedico = idMedico;
}
public Date getDataInscricaoCrm() {
return dataInscricaoCrm;
}
public void setDataInscricaoCrm(Date dataInscricaoCrm) {
this.dataInscricaoCrm = dataInscricaoCrm;
}
public int getVersionNum() {
return versionNum;
}
public void setVersionNum(int versionNum) {
this.versionNum = versionNum;
}
public Pessoa getPessoa() {
return pessoa;
}
public void setPessoa(Pessoa pessoa) {
this.pessoa = pessoa;
}
public String getNumeroCrm() {
return numeroCrm;
}
public void setNumeroCrm(String numeroCrm) {
this.numeroCrm = numeroCrm;
}
public String[] getSelecionaEspecialidades() {
return selecionaEspecialidades;
}
public void setSelecionaEspecialidades(String[] selecionaEspecialidades) {
this.selecionaEspecialidades = selecionaEspecialidades;
}
// HASH CODE & EQUALS
public List<Especialidade> getEspecialidades() {
return especialidades;
}
public void setEspecialidades(List<Especialidade> especialidades) {
this.especialidades = especialidades;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((idMedico == null) ? 0 : idMedico.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Medico other = (Medico) obj;
if (idMedico == null) {
if (other.idMedico != null)
return false;
} else if (!idMedico.equals(other.idMedico))
return false;
return true;
}
}
Especialidade Model Mapping
/**
* @author Humberto
*
*/
@Entity
@Audited
@Table(name="especialidade")
@SequenceGenerator(name="especialidade_seq", sequenceName="especialidade_seq", initialValue = 1, allocationSize = 1)
public class Especialidade implements Serializable {
private static final long serialVersionUID = 1L;
@IdentificaCampoPesquisa(descricaoCampo = "Código", campoConsulta ="idEspecialidade", principal = 1 )
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "especialidade_seq")
private Long idEspecialidade;
@IdentificaCampoPesquisa(descricaoCampo = "Especialidade", campoConsulta = "nomeEspecialidade", principal = 2)
private String nomeEspecialidade;
private String observacao;
@Version
@Column(name = "versionNum")
private int versionNum;
@ManyToMany(mappedBy="especialidades")
private List<Medico> medicos = new ArrayList<>();
//EQUALS E HASCODE ----------------------------------------
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((idEspecialidade == null) ? 0 : idEspecialidade.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Especialidade other = (Especialidade) obj;
if (idEspecialidade == null) {
if (other.idEspecialidade != null)
return false;
} else if (!idEspecialidade.equals(other.idEspecialidade))
return false;
return true;
}
//GETTERS E SETTERS----------------------------------------------
public Long getIdEspecialidade() {
return idEspecialidade;
}
public void setIdEspecialidade(Long idEspecialidade) {
this.idEspecialidade = idEspecialidade;
}
public String getNomeEspecialidade() {
return nomeEspecialidade;
}
public void setNomeEspecialidade(String nomeEspecialidade) {
this.nomeEspecialidade = nomeEspecialidade;
}
public String getObservacao() {
return observacao;
}
public void setObservacao(String observacao) {
this.observacao = observacao;
}
public int getVersionNum() {
return versionNum;
}
public void setVersionNum(int versionNum) {
this.versionNum = versionNum;
}
public List<Medico> getMedicos() {
return medicos;
}
public void setMedicos(List<Medico> medicos) {
this.medicos = medicos;
}
}
Specialityecontroller
public List<SelectItem> getListEspecialidades() throws Exception {
List<SelectItem> list = new ArrayList<SelectItem>();
List<Especialidade> especialidades = super.findListByQueryDinamica(" from Especialidade");
for (Especialidade especialidade : especialidades) {
list.add(new SelectItem(especialidade,especialidade.getNomeEspecialidade()));
}
return list;
}
Especialidadebeanview
public List<SelectItem> getEspecialidades() throws Exception {
return especialidadeController.getListEspecialidades();
}
Botao Salvar
public void saveNotReturn() throws Exception {
list.clean();
objetoSelecionado = medicoController.merge(objetoSelecionado);
list.add(objetoSelecionado);
objetoSelecionado = new Medico();
sucesso();
}
Stack Error When Clicking Save Button
javax.el.ELException: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of br.com.projeto.model.classes.Especialidade.idEspecialidade
at com.sun.el.parser.AstValue.invoke(AstValue.java:238)
at
Caused by: java.lang.IllegalArgumentException: Can not set java.lang.Long field br.com.projeto.model.classes.Especialidade.idEspecialidade to java.lang.String
Okay, that’s where you need to take it slow, but the mistake is what I said there, data typing, you’re trying to put a string where it’s a long.
– Filipe L. Constante