-- Table: condômino
CREATE TABLE condomino
(
con_codigo integer NOT NULL,
con_cpf character(11),
con_email character varying(50),
con_password character(6),
cod_apto integer,
fun_nivel character(1),
con_nome character varying(100),
CONSTRAINT condomino_pkey PRIMARY KEY (con_codigo),
CONSTRAINT apartamento_apa_codigo_fkey FOREIGN KEY (cod_apto)
REFERENCES apartamento (apa_codigo) MATCH FULL
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITHOUT OIDS;
-- Table: apartamento
CREATE TABLE apartamento
(
apa_codigo integer NOT NULL,
apa_num integer,
tor_codigo integer,
CONSTRAINT apartamento_pkey PRIMARY KEY (apa_codigo),
CONSTRAINT apartamento_tor_codigo_fkey FOREIGN KEY (tor_codigo)
REFERENCES torre (tor_codigo) MATCH FULL
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITHOUT OIDS;
Estou inserindo através do web services, mas me dá um erro gigante no qual tudo indica que há algum valor NULL.
@WebService(serviceName = "GerenciarEncomendasWsApp")
@Stateless()
public class GerenciarEncomendasWsApp {
@EJB
CondominoFacadeRemote condominoFacadeBean;
@WebMethod(operationName = "cadastrarCondomino")
public void cadastrarCondomino(@WebParam(name = "cpf") String cpf, @WebParam(name = "email") String email, @WebParam(name = "password") String password, @WebParam(name = "codapto") Integer codapto, @WebParam(name = "nivelAcesso") String nivel, @WebParam(name = "nome") String nome) {
//TODO write your implementation code here:
condominoFacadeBean.adicionar(cpf, email, password, codapto, nivel, nome);
}
Já tentei passar valores direto(sem variáveis) para ver se insere, mas nada deu certo! Eu acredito que a forma como estou fazendo para inserir na tabela com a FK (ManyToOne) está errada. Outra tabela que não tem FK insere normalmente. Poderiam me ajudar?
Principais dúvidas:
1. Como faço para inserir um registro na tabela condomino tendo em vista que a tabela Apartamento já possui o registro (seria tipo multivalorados)?
2. A forma como estou fazendo na classe CondominoFacade para inserir um registro na tabela condomino está correto?
Obrigado!
A Classe CondominoFacade
public class CondominoFacade implements CondominoFacadeRemote, CondominoFacadeLocal {
@PersistenceContext
private EntityManager em;
@Override
public void adicionar(String cpf, String email, String password, Integer codapto, String nivel, String nome) {
Condomino condomino = new Condomino();
condomino.setConCodigo(gerarNovoCodigo());
condomino.setConCpf(cpf);
condomino.setConEmail(email);
condomino.setConPassword(password);
condomino.setConNivel(nivel);
condomino.setConNome(nome);
Apartamento apartamento = new Apartamento();
apartamento.setApaCodigo(codapto);
condomino.setApaCodigo(apartamento);
em.persist(condomino);
//em.flush();
}
@Override
public int gerarNovoCodigo() {
String s;
int n;
if(em.createNamedQuery("Condomino.findAll").getResultList().isEmpty()){
n=0;
}else{
s = em.createNamedQuery("Condomino.getMaxCodigo").getSingleResult().toString();
n = Integer.parseInt(s);
}
return n+1;
}
. Mais coisas aqui
.
.
}
Classe Condômino
@Entity
@Table(name = "condomino",catalog = "", schema = "public")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Condomino.getMaxCodigo", query = "SELECT MAX(c.conCodigo) FROM Condomino c"),
@NamedQuery(name = "Condomino.findAll", query = "SELECT c FROM Condomino c"),
@NamedQuery(name = "Condomino.findByConCodigo", query = "SELECT c FROM Condomino c WHERE c.conCodigo = :conCodigo"),
@NamedQuery(name = "Condomino.findByConCpf", query = "SELECT c FROM Condomino c WHERE c.conCpf = :conCpf"),
@NamedQuery(name = "Condomino.findByConEmail", query = "SELECT c FROM Condomino c WHERE c.conEmail = :conEmail"),
@NamedQuery(name = "Condomino.findByConPassword", query = "SELECT c FROM Condomino c WHERE c.conPassword = :conPassword"),
@NamedQuery(name = "Condomino.findByConNivel", query = "SELECT c FROM Condomino c WHERE c.conNivel = :conNivel"),
@NamedQuery(name = "Condomino.findByNome", query = "SELECT c FROM Condomino c WHERE c.conNome = :conNome")})
public class Condomino implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Column(name = "con_codigo")
private Integer conCodigo;
@Size(max = 11)
@Column(name = "con_cpf")
private String conCpf;
@Size(max = 20)
@Column(name = "con_email")
private String conEmail;
@Size(max = 6)
@Column(name = "con_password")
private String conPassword;
@JoinColumn(name = "condomino.cod_apto", referencedColumnName = "apartamento.apa_codigo")
@ManyToOne(optional = true)
private Apartamento apaCodigo;
@OneToMany(mappedBy = "conCodigo")
private Collection<Encomenda> encomendaCollection;
@Size(max = 1)
@Column(name = "con_nivel")
private String conNivel;
@Size(max = 100)
@Column(name = "con_Nome")
private String conNome;
public Condomino() {
}
public Condomino(Integer conCodigo) {
this.conCodigo = conCodigo;
}
public Integer getConCodigo() {
return conCodigo;
}
public void setConCodigo(Integer conCodigo) {
this.conCodigo = conCodigo;
}
public String getConCpf() {
return conCpf;
}
public void setConCpf(String conCpf) {
this.conCpf = conCpf;
}
public String getConEmail() {
return conEmail;
}
public void setConEmail(String conEmail) {
this.conEmail = conEmail;
}
public String getConPassword() {
return conPassword;
}
public void setConPassword(String conPassword) {
this.conPassword = conPassword;
}
public Apartamento getApaCodigo() {
return apaCodigo;
}
public void setApaCodigo(Apartamento apaCodigo) {
this.apaCodigo = apaCodigo;
}
@XmlTransient
public Collection<Encomenda> getEncomendaCollection() {
return encomendaCollection;
}
public void setEncomendaCollection(Collection<Encomenda> encomendaCollection) {
this.encomendaCollection = encomendaCollection;
}
public void setConNivel(String conNivel) {
this.conNivel = conNivel;
}
public String getConNivel() {
return conNivel;
}
public void setConNome(String conNome) {
this.conNome = conNome;
}
public String getConNome() {
return conNome;
}
@Override
public int hashCode() {
int hash = 0;
hash += (conCodigo != null ? conCodigo.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 Condomino)) {
return false;
}
Condomino other = (Condomino) object;
if ((this.conCodigo == null && other.conCodigo != null) || (this.conCodigo != null && !this.conCodigo.equals(other.conCodigo))) {
return false;
}
return true;
}
@Override
public String toString() {
return "org.ws.gerencdeencomendas.model.Condomino[ conCodigo=" + conCodigo + " ]";
}
Classe Apartamento Gerada
}
package org.ws.gerencdeencomendas.model;
import java.io.Serializable;
import java.util.Collection;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
/**
* @author Administrador
*/
@Entity
@Table(name = "apartamento",catalog = "", schema = "public")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Apartamento.findAll", query = "SELECT a FROM Apartamento a"),
@NamedQuery(name = "Apartamento.findByApaCodigo", query = "SELECT a FROM Apartamento a WHERE a.apaCodigo = :apaCodigo"),
@NamedQuery(name = "Apartamento.findByApaNum", query = "SELECT a FROM Apartamento a WHERE a.apaNum = :apaNum")})
public class Apartamento implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Column(name = "apa_codigo")
private Integer apaCodigo;
@Column(name = "apa_num")
private Integer apaNum;
@JoinColumn(name = "tor_codigo", referencedColumnName = "tor_codigo")
@ManyToOne
private Torre torCodigo;
@OneToMany(mappedBy = "apaCodigo")
private Collection<Condomino> condominoCollection;
@OneToMany(mappedBy = "apaCodigo")
private Collection<Encomenda> encomendaCollection;
public Apartamento() {
}
public Apartamento(Integer apaCodigo) {
this.apaCodigo = apaCodigo;
}
public Integer getApaCodigo() {
return apaCodigo;
}
public void setApaCodigo(Integer apaCodigo) {
this.apaCodigo = apaCodigo;
}
public Integer getApaNum() {
return apaNum;
}
public void setApaNum(Integer apaNum) {
this.apaNum = apaNum;
}
public Torre getTorCodigo() {
return torCodigo;
}
public void setTorCodigo(Torre torCodigo) {
this.torCodigo = torCodigo;
}
@XmlTransient
public Collection<Condomino> getCondominoCollection() {
return condominoCollection;
}
public void setCondominoCollection(Collection<Condomino> condominoCollection) {
this.condominoCollection = condominoCollection;
}
@XmlTransient
public Collection<Encomenda> getEncomendaCollection() {
return encomendaCollection;
}
public void setEncomendaCollection(Collection<Encomenda> encomendaCollection) {
this.encomendaCollection = encomendaCollection;
}
@Override
public int hashCode() {
int hash = 0;
hash += (apaCodigo != null ? apaCodigo.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 Apartamento)) {
return false;
}
Apartamento other = (Apartamento) object;
if ((this.apaCodigo == null && other.apaCodigo != null) || (this.apaCodigo != null && !this.apaCodigo.equals(other.apaCodigo))) {
return false;
}
return true;
}
@Override
public String toString() {
return "org.ws.gerencdeencomendas.model.Apartamento[ apaCodigo=" + apaCodigo + " ]";
}
}