I´m making the model classes using Hibernate, but I don´t know what to do with this kind of relationship.
I have three tables.
Adrress, employee and person.
One emplooye can have one adrress and one person can have one addrress.
I don´t know how map.
Because I thought to use embedded annotattion but doesn´t work.
First is to map my class, I need to put this two entities in address class?
What kind of annotattion i need to use?
I use a superclass with id property and every class extends.
I´m using mysql
my person class
@Entity
@Table(name = "destinatario")
public class Destinatario extends Persistent {
private static final long serialVersionUID = -7091318100871934315L;
@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "endereco_id", referencedColumnName = "id")
private Endereco endereco;
@NotNull
@Size(max = 60)
@Column(name = "razao_social")
private String razaoSocial;
@NotNull
@Size(max = 14)
@Column(name = "inscricao_estadual")
private String inscricaoEstadual;
@Size(max = 9)
@Column(name = "inscricao_suframa")
private String inscricaoSuframa;
@Size(max = 60)
@Column(name = "email")
private String email;
@Size(max = 14)
@Column(name = "cnpj")
private String cnpj;
@Size(max = 11)
@Column(name = "cpf")
private String cpf;
@OneToMany
@JoinColumn(name = "destinatario_id")
private List<NotaFiscal> notaFiscais;
}
my address class
@Entity
@Table(name = "endereco")
public class Endereco extends Persistent {
private static final long serialVersionUID = -3308931308130690090L;
public enum UF {
AC("AC", "Acre"),
AL("AL", "Alagoas"),
AP("AP", "Amapá"),
AM("AM", "Amazonas"),
BA("BA", "Bahia"),
CE("CE", "Ceara"),
DF("DF", "Distrito Federal"),
ES("ES", "Espirito Santo"),
GO("GO", "Goiás"),
MA("MA", "Maranhão"),
MT("MT", "Mato Grosso"),
MS("MS", "Mato Grosso do Sul"),
MG("MG", "Minas Gerais"),
PA("PA", "Pará"),
PB("PB", "Paraíba"),
PR("PR", "Paraná"),
PE("PE", "Pernambuco"),
PI("PI", "Piauí"),
RJ("RJ", "Rio de Janeiro"),
RN("RN", "Rio Grande do Norte"),
RS("RS", "Rio Grande do Sul"),
RO("RO", "Rondônia"),
RR("RR", "Roraima"),
SC("SC", "Santa Catarina"),
SP("SP", "São Paulo"),
SE("SE", "Sergipe"),
TO("TO", "Tocantins");
private final String index;
private String descricao;
private UF(String index, String descricao) {
this.index = index;
this.descricao = descricao;
}
public String getNomeEstado() {
return descricao;
}
public String getIndex() {
return index;
}
}
@NotNull
@Size(max = 60)
@Column(name = "logradouro", unique = true)
private String logradouro;
@NotNull
@Size(max = 60)
@Column(name = "numero", unique = true)
private String numero;
@Size(max = 60)
@Column(name = "complemento")
private String complemento;
@NotNull
@Size(max = 60)
@Column(name = "bairro", unique = true)
private String bairro;
@NotNull
@Size(max = 60)
@Column(name = "municipio", unique = true)
private String municipio;
@Enumerated(EnumType.STRING)
@NotNull
//@Type(type = UFType.TYPE)
@Column(name = "uf", columnDefinition = "varchar", length = 2)
private UF uf;
@NotNull
@Size(max = 8)
@Column(name = "cep", unique = true)
private String cep;
@Size(max = 14)
@Column(name = "telefone")
private String telefone;
}
my methods to run and create a person by xml source
public static void main(String[] args) {
new Processadora().extrairDadosXml("diego");
ArquivoNotaFiscal arquivoNotaFiscal = null;
Destinatario destinatario = null;
NotaFiscal notaFiscal = null;
destinatario = createDestinatario();
arquivoNotaFiscal = createArquivoNotaFiscal();
notaFiscal = createNotaFiscal(arquivoNotaFiscal, emitente, destinatario);
destinatario.setNotaFiscais(Arrays.asList(notaFiscal));
DestinatarioDAO<Destinatario> destinatarioDAO = new DestinatarioDAOImpl<>();
Session session = HibernateSessionFactory.getSession();
Transaction transaction = session.getTransaction();
transaction.begin();
destinatarioDAO.save(destinatario);
transaction.commit();
}
private static Destinatario createDestinatario() {
Destinatario destinatario = new Destinatario();
Endereco endereco = new Endereco();
endereco.setLogradouro(nFeProc.getNfe().getInfNFe().getDestinatario().getEndereco().getLogradouro());
endereco.setNumero(nFeProc.getNfe().getInfNFe().getDestinatario().getEndereco().getNumero());
endereco.setBairro(nFeProc.getNfe().getInfNFe().getDestinatario().getEndereco().getBairro());
endereco.setComplemento(nFeProc.getNfe().getInfNFe().getDestinatario().getEndereco().getComplemento());
endereco.setCep(nFeProc.getNfe().getInfNFe().getDestinatario().getEndereco().getCep());
endereco.setMunicipio(nFeProc.getNfe().getInfNFe().getDestinatario().getEndereco().getMunicipio());
endereco.setUf(UF.valueOf(nFeProc.getNfe().getInfNFe().getDestinatario().getEndereco().getUF()));
endereco.setTelefone(nFeProc.getNfe().getInfNFe().getDestinatario().getEndereco().getTelefone());
destinatario.setEndereco(endereco);
destinatario.setRazaoSocial(nFeProc.getNfe().getInfNFe().getDestinatario().getRazaoSocial());
destinatario.setInscricaoEstadual(nFeProc.getNfe().getInfNFe().getDestinatario().getInscricaoEstadual());
destinatario.setInscricaoSuframa(nFeProc.getNfe().getInfNFe().getDestinatario().getInscricaoSuframa());
destinatario.setEmail(nFeProc.getNfe().getInfNFe().getDestinatario().getEmail());
destinatario.setCnpj(nFeProc.getNfe().getInfNFe().getDestinatario().getCnpj());
destinatario.setCpf(nFeProc.getNfe().getInfNFe().getDestinatario().getCpf());
return destinatario;
}
my database have foreign key constraint, I´m using mysql