Hibernate を使用してモデル クラスを作成していますが、この種の関係をどうすればよいかわかりません。
私は3つのテーブルを持っています。
住所、従業員、人物。
1 人の従業員が 1 つの住所を持つことができ、1 人が 1 つの住所を持つことができます。
マップの仕方がわかりません。
埋め込みアノテーションを使おうと思ったのですが、うまくいきません。
まず、クラスをマップします。この 2 つのエンティティをアドレス クラスに配置する必要がありますか?
どのような種類の注釈を使用する必要がありますか?
id プロパティを持つスーパークラスを使用し、すべてのクラスを拡張します。
私はmysqlを使用しています
私の個人クラス
@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;
}
私のアドレスクラス
@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;
}
xml ソースで人を実行および作成する私の方法
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;
}
私のデータベースには外部キー制約があり、mysql を使用しています