0

我正在使用 Hibernate 制作模型类,但我不知道如何处理这种关系。

我有三张桌子。

地址、员工和个人。

一个雇员可以有一个地址,一个人可以有一个地址。

不知道怎么映射。

因为我想使用嵌入式注释但不起作用。

首先是映射我的类,我需要把这两个实体放在地址类中吗?

我需要使用什么样的注释?

我使用具有 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

4

1 回答 1

0

我发现了我的问题,我只保存了一个对象,因为我认为如果我对包含其他对象的对象使用保存,它将保存,但我需要先保存地址,然后再保存人。

所以这种方式一切正常。

于 2013-11-03T22:01:38.540 回答