Boa tarde a todos.
Estou engatinhando no Hibernate e estou com uma dúvida. Tenho uma tabela no BD chamada Laboratorio, outra chamada Exame. Estas tabelas tem um relacionamento N:N, onde foi criada uma outra tabela chamada laboratorio_exame, pois nesta tabela eu salvo o valor de cada exame de cada laboratório.
Pra começar, gostaria de saber se meu mapeamento manytomany está correto:
Classe Laboratorio
@Entity
@Table(name = "laboratorio")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "LaboratorioVO.findAll", query = "SELECT l FROM LaboratorioVO l"),
@NamedQuery(name = "LaboratorioVO.findById", query = "SELECT l FROM LaboratorioVO l WHERE l.id = :id"),
@NamedQuery(name = "LaboratorioVO.findByNome", query = "SELECT l FROM LaboratorioVO l WHERE l.nome = :nome"),
@NamedQuery(name = "LaboratorioVO.findByEndereco", query = "SELECT l FROM LaboratorioVO l WHERE l.endereco = :endereco"),
@NamedQuery(name = "LaboratorioVO.findByBairro", query = "SELECT l FROM LaboratorioVO l WHERE l.bairro = :bairro"),
@NamedQuery(name = "LaboratorioVO.findByCidade", query = "SELECT l FROM LaboratorioVO l WHERE l.cidade = :cidade"),
@NamedQuery(name = "LaboratorioVO.findByEstado", query = "SELECT l FROM LaboratorioVO l WHERE l.estado = :estado"),
@NamedQuery(name = "LaboratorioVO.findByCep", query = "SELECT l FROM LaboratorioVO l WHERE l.cep = :cep"),
@NamedQuery(name = "LaboratorioVO.findByCnpj", query = "SELECT l FROM LaboratorioVO l WHERE l.cnpj = :cnpj"),
@NamedQuery(name = "LaboratorioVO.findByInscEstadual", query = "SELECT l FROM LaboratorioVO l WHERE l.inscEstadual = :inscEstadual"),
@NamedQuery(name = "LaboratorioVO.findByTelefone", query = "SELECT l FROM LaboratorioVO l WHERE l.telefone = :telefone"),
@NamedQuery(name = "LaboratorioVO.findByEmail", query = "SELECT l FROM LaboratorioVO l WHERE l.email = :email"),
@NamedQuery(name = "LaboratorioVO.findByDiasAtendimento", query = "SELECT l FROM LaboratorioVO l WHERE l.diasAtendimento = :diasAtendimento")})
public class LaboratorioVO extends ValueObjectImpl implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "ID", nullable = false)
private Integer id;
@Column(name = "NOME", length = 100)
private String nome;
@Column(name = "ENDERECO", length = 100)
private String endereco;
@Column(name = "BAIRRO", length = 50)
private String bairro;
@Column(name = "CIDADE", length = 50)
private String cidade;
@Column(name = "ESTADO", length = 2)
private String estado;
@Column(name = "CEP", length = 8)
private String cep;
@Column(name = "CNPJ")
private Integer cnpj;
@Column(name = "INSC_ESTADUAL", length = 20)
private String inscEstadual;
@Column(name = "TELEFONE", length = 100)
private String telefone;
@Column(name = "EMAIL", length = 100)
private String email;
@Column(name = "DIAS_ATENDIMENTO", length = 100)
private String diasAtendimento;
public LaboratorioVO() {
}
public LaboratorioVO(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getEndereco() {
return endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
public String getBairro() {
return bairro;
}
public void setBairro(String bairro) {
this.bairro = bairro;
}
public String getCidade() {
return cidade;
}
public void setCidade(String cidade) {
this.cidade = cidade;
}
public String getEstado() {
return estado;
}
public void setEstado(String estado) {
this.estado = estado;
}
public String getCep() {
return cep;
}
public void setCep(String cep) {
this.cep = cep;
}
public Integer getCnpj() {
return cnpj;
}
public void setCnpj(Integer cnpj) {
this.cnpj = cnpj;
}
public String getInscEstadual() {
return inscEstadual;
}
public void setInscEstadual(String inscEstadual) {
this.inscEstadual = inscEstadual;
}
public String getTelefone() {
return telefone;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getDiasAtendimento() {
return diasAtendimento;
}
public void setDiasAtendimento(String diasAtendimento) {
this.diasAtendimento = diasAtendimento;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof LaboratorioVO)) {
return false;
}
LaboratorioVO other = (LaboratorioVO) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sismed.cadastros.java.LaboratorioVO[ id=" + id + " ]";
}
}
Classe Exame
@Entity
@Table(name = "exame")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "ExameVO.findAll", query = "SELECT e FROM ExameVO e"),
@NamedQuery(name = "ExameVO.findById", query = "SELECT e FROM ExameVO e WHERE e.id = :id"),
@NamedQuery(name = "ExameVO.findByCodigo", query = "SELECT e FROM ExameVO e WHERE e.codigo = :codigo"),
@NamedQuery(name = "ExameVO.findByNome", query = "SELECT e FROM ExameVO e WHERE e.nome = :nome")})
public class ExameVO extends ValueObjectImpl implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "ID", nullable = false)
private Integer id;
@Column(name = "CODIGO", nullable = false)
private Integer codigo;
@Column(name = "NOME", length = 60)
private String nome;
public ExameVO() {
}
public ExameVO(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getCodigo() {
return codigo;
}
public void setCodigo(Integer codigo) {
this.codigo = codigo;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof ExameVO)) {
return false;
}
ExameVO other = (ExameVO) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sismed.cadastros.java.Exame[ id=" + id + " ]";
}
}
Classe LaboratorioExame
@Entity
@Table(name = "laboratorio_exame")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "LaboratorioExameVO.findAll", query = "SELECT l FROM LaboratorioExameVO l"),
@NamedQuery(name = "LaboratorioExameVO.findByLaboratorioId", query = "SELECT l FROM LaboratorioExameVO l WHERE l.laboratorioExameVOPK.laboratorioId = :laboratorioId"),
@NamedQuery(name = "LaboratorioExameVO.findByExameId", query = "SELECT l FROM LaboratorioExameVO l WHERE l.laboratorioExameVOPK.exameId = :exameId"),
@NamedQuery(name = "LaboratorioExameVO.findByValor", query = "SELECT l FROM LaboratorioExameVO l WHERE l.valor = :valor")})
public class LaboratorioExameVO extends ValueObjectImpl implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
protected LaboratorioExameVOPK laboratorioExameVOPK;
// @Max(value=?) @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
@Column(name = "VALOR", precision = 10, scale = 2)
private Double valor;
public LaboratorioExameVO() {
}
public LaboratorioExameVO(LaboratorioExameVOPK laboratorioExameVOPK) {
this.laboratorioExameVOPK = laboratorioExameVOPK;
}
public LaboratorioExameVO(int laboratorioId, int exameId) {
this.laboratorioExameVOPK = new LaboratorioExameVOPK(laboratorioId, exameId);
}
public LaboratorioExameVOPK getLaboratorioExameVOPK() {
return laboratorioExameVOPK;
}
public void setLaboratorioExameVOPK(LaboratorioExameVOPK laboratorioExameVOPK) {
this.laboratorioExameVOPK = laboratorioExameVOPK;
}
public Double getValor() {
return valor;
}
public void setValor(Double valor) {
this.valor = valor;
}
@Transient
public LaboratorioVO getLaboratorio() {
return this.getLaboratorio();
}
@Transient
public ExameVO getExame() {
return this.getExame();
}
@Override
public int hashCode() {
int hash = 0;
hash += (laboratorioExameVOPK != null ? laboratorioExameVOPK.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof LaboratorioExameVO)) {
return false;
}
LaboratorioExameVO other = (LaboratorioExameVO) object;
if ((this.laboratorioExameVOPK == null && other.laboratorioExameVOPK != null) || (this.laboratorioExameVOPK != null && !this.laboratorioExameVOPK.equals(other.laboratorioExameVOPK))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sismed.cadastros.java.LaboratorioExameVO[ laboratorioExameVOPK=" + laboratorioExameVOPK + " ]";
}
}
Classe LaboratorioExameVOPK
@Embeddable
public class LaboratorioExameVOPK implements Serializable {
@Basic(optional = false)
@Column(name = "LABORATORIO_ID", nullable = false)
private int laboratorioId;
@Basic(optional = false)
@Column(name = "EXAME_ID", nullable = false)
private int exameId;
public LaboratorioExameVOPK() {
}
public LaboratorioExameVOPK(int laboratorioId, int exameId) {
this.laboratorioId = laboratorioId;
this.exameId = exameId;
}
public int getLaboratorioId() {
return laboratorioId;
}
public void setLaboratorioId(int laboratorioId) {
this.laboratorioId = laboratorioId;
}
public int getExameId() {
return exameId;
}
public void setExameId(int exameId) {
this.exameId = exameId;
}
@Override
public int hashCode() {
int hash = 0;
hash += (int) laboratorioId;
hash += (int) exameId;
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof LaboratorioExameVOPK)) {
return false;
}
LaboratorioExameVOPK other = (LaboratorioExameVOPK) object;
if (this.laboratorioId != other.laboratorioId) {
return false;
}
if (this.exameId != other.exameId) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sismed.cadastros.java.LaboratorioExameVOPK[ laboratorioId=" + laboratorioId + ", exameId=" + exameId + " ]";
}
}
Este mapeamento está correto? E como eu faço para utilizar Criteria para trazer todos os dados da tabela laboratorio_exame, sem filtro algum, por enquanto?
Desde já agradeço a todos.