Olá a todos,
Estou enfrentando um dilema, cada um resolve de uma maneira mas até agora nenhum eficiente.
O cenário é o seguinte:
Tenho um cadastro de empresa, onde tenho endereco , cidades e estado.
Empresa --> Endereco --> Estados --> Cidades.
Estou tentando fazer esse relacionamento, lembrando que a tabela cidade e estado são estáticas.
Empresa.java
@Entity
@Table(name = "EMPRESA")
@SuppressWarnings("serial")
public class Empresa implements Serializable {
/** Id da empresa */
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
/** Classe com os parametros do Endereço */
@OneToOne(optional = true)
@PrimaryKeyJoinColumn(name = "empresa_idEmpresa", referencedColumnName="idEmpresa")
private Endereco endereco;
Endereco.java
@Entity
@Table(name = "ENDERECO")
@SuppressWarnings("serial")
public class Endereco implements Serializable {
/** ID do endereco da empresa, psicologo e usuario */
@Id
@Column(name = "ENDERECO_ID")
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@OneToOne(mappedBy = "endereco")
@PrimaryKeyJoinColumn(name = "idEmpresa", referencedColumnName = "empresa_idEmpresa")
private Empresa empresa;
@OneToOne(mappedBy = "endereco")
@PrimaryKeyJoinColumn(name = "idEstado", referencedColumnName = "estado_idEstado")
private Estado estado;
Estado.java
@SuppressWarnings("serial")
@Embeddable
@Table(name = "ESTADO")
public class Estado implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ManyToOne
private Cidade cidade;
/** Classe com os parametros do Endereço */
@OneToOne(optional = true)
@PrimaryKeyJoinColumn(name = "estado_idEstado", referencedColumnName="idEstado")
private Endereco endereco;
Cidade.java
@Embeddable
@Table(name = "CIDADE")
@SuppressWarnings("serial")
public class Cidade implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToMany(mappedBy = "cidade")
private List<Estado> estados;
AGRADEÇO DESDE JÁ TODAS AS AJUDAS.
Muito Obrigado
Não sei qual é a sua dúvida,
Porém o relacionamento certo ai seria: Empresa -> Endereço -> Cidades -> Estados.
Assim sendo, o Endereço faz um relacionamento OneToMany com Cidades, assim como Cidades faz um OneToMany com Estados.
Isso esclarece a sua dúvida?
Jair,
Só pra confirmar, vai ficar assim.
Empresa one-to-one Endereco --> Endereco one-to-many Cidades --> Cidades one-to-many Estados
Correto?
Muito obrigado
Jair,
Muito obrigado pela ajuda.
Como voce tem mais conhecimentos, gostaria se saber, como ficaria minha servlet, sendo que Cidade e Estado sao tabelas estáticas.
Muito obrigado pela ajuda.
Douglas Luciano
Minha Servlet Empresa.
@SuppressWarnings("serial")
public class EmpresaServlet extends HttpServlet {
@SuppressWarnings("unchecked")
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Recupera o contexto da aplicação spring.
WebApplicationContext context = WebApplicationContextUtils
.getWebApplicationContext(getServletContext());
//Objeto
Estado estado = new Estado();
estado.setNome(request.getParameter("estado"));
//Objeto
Cidade cidade = new Cidade();
cidade.setNome(request.getParameter("cidade"));
// Objeto Endereco
Endereco endereco = new Endereco();
endereco.setLogradouro(request.getParameter("logradouro"));
endereco.setBairro(request.getParameter("bairro"));
endereco.setCep(request.getParameter("cep"));
// Objeto Telefone
Telefone telefone = new Telefone();
telefone.setDddTel(Integer.parseInt(request.getParameter("dddTel").toString()));
telefone.setTel(request.getParameter("tel").toString());
// Recupera o manager de empresa para inclusão ou atualização.
GenericManager<Empresa, Long> empresaManager = (GenericManager<Empresa, Long>) context
.getBean("empresaManager");
Empresa empresa = new Empresa();
empresa.setRazaoSocial(request.getParameter("razaoSocial"));
String fotmatedValue = (request.getParameter("cnpj"));
empresa.setCnpj(fotmatedValue);
empresa.setInscricaoEstadual(request.getParameter("inscricaoEstadual"));
if(empresa.getInscricaoEstadual() == null){
empresa.setInscricaoEstadual("ISENTO");
}
empresa.setIsento(Boolean.parseBoolean(request.getParameter("isento")));
empresa.setEndereco(endereco);
empresa.setTelefone(telefone);
// ... Preenche e valida...
ClassValidator empresaValidator = new ClassValidator(Empresa.class,
ResourceBundle.getBundle("psiconlineMessages", Locale.ENGLISH));
InvalidValue[] invalidValues = empresaValidator
.getInvalidValues(empresa);
if (invalidValues.length == 0) {
// Se tiver ok, salva.
try {
empresaManager.save(empresa);
} catch (Exception e) {
request.setAttribute("erros", Collections
.singletonList("Sistema indisponível"));
e.printStackTrace();
}
request.getRequestDispatcher("cadastraEmpresaSucesso.jsp").forward(request, response);
} else {
List<String> erros = new ArrayList<String>();
for (InvalidValue invalidValue : invalidValues) {
erros.add(invalidValue.getMessage());
}
request.setAttribute("erros", erros);
request.getRequestDispatcher("index.html").forward(request, response);
}
}
}