gpt4 book ai didi

mysql - 使用同一实体将此关系映射到 2 个实体

转载 作者:行者123 更新时间:2023-11-30 01:05:33 24 4
gpt4 key购买 nike

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

我有三张 table 。

地址、员工和人员。

一名员工可以有一个地址,一个人可以有一个地址。

我不知道如何映射。

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

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

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

我使用带有 id 属性的父类(super class),并且每个类都扩展。

我正在使用 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

最佳答案

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

这样一切就都成功了。

关于mysql - 使用同一实体将此关系映射到 2 个实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19753100/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com