gpt4 book ai didi

java - 具有相同名称的实体,始终为第一个 id 插入

转载 作者:行者123 更新时间:2023-11-30 22:21:21 25 4
gpt4 key购买 nike

我有一个jCombobox,我在其中加载所有学生实体。可以有两个具有相同 name 的学生,然后将两者都加载到 jComboBox 中。

问题是,当我将数据插入数据库时,无论我在jcombobox中选择了那两个学生中的哪一个, 它总是为第一个 "id"插入(在这种情况下,同名的学生是 id 1 和 id 6),所以它总是为 id 1..

的学生插入

我肯定遗漏了一些东西,有人可以帮助找到它吗?现在谢谢。

我添加了一些代码,看看现在是否更好理解,谢谢。

实体 导体:

@Entity
@DynamicUpdate(value=true)
@NamedQueries({
@NamedQuery(name = "Condutor.findAll", query = "SELECT c FROM Condutor c"),
@NamedQuery(name = "Condutor.findByCondutorId", query = "SELECT c FROM Condutor c WHERE c.id = :id"),
@NamedQuery(name = "Condutor.findByCondutorNome", query = "SELECT c FROM Condutor c WHERE c.nome = :nome")})
public class Condutor implements EntidadeBase, Serializable {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "idCondutor")
private Integer id;
@Column(name = "nomeCondutor")
private String nome;
@ManyToOne
@JoinColumn(name = "setorCondutor")
private Setor setor;
@ManyToOne
@JoinColumn(name = "pessoaCondutor")
private Pessoa pessoa;
@ManyToOne
@JoinColumn(name = "empresaCondutor")
private Empresa empresa;
@ManyToOne
@JoinColumn(name = "statusCondutor")
private Status status;
@OneToMany(mappedBy = "condutor", cascade = CascadeType.ALL)
private List<CondutorInfracao> condInfracoes;

public Condutor() {
}

public Condutor(String nome, Setor setor, Pessoa pessoa, Empresa empresa, Status status) {

this.nome = nome;
this.setor = setor;
this.pessoa = pessoa;
this.empresa = empresa;
this.status = status;
}

/**
* @return the id
*/
/**
* @param id the id to set
*/
public void setId(Integer id) {
this.id = id;
}

/**
* @return the nome
*/
public String getNome() {
return nome;
}

/**
* @param nome the nome to set
*/
public void setNome(String nome) {
this.nome = nome;
}

/**
* @return the setor
*/
public Setor getSetor() {
return setor;
}

/**
* @param setor the setor to set
*/
public void setSetor(Setor setor) {
this.setor = setor;
}

public Pessoa getPessoa() {
return pessoa;
}

public void setPessoa(Pessoa pessoa) {
this.pessoa = pessoa;
}

public Empresa getEmpresa() {
return empresa;
}

public void setEmpresa(Empresa empresa) {
this.empresa = empresa;
}

public Status getStatus() {
return status;
}

public void setStatus(Status status) {
this.status = status;
}

public List<CondutorInfracao> getCondInfracoes() {
return condInfracoes;
}

public void setCondInfracoes(List<CondutorInfracao> condInfracoes) {
this.condInfracoes = condInfracoes;
}

@Override
public int hashCode() {
int hash = 7;
hash = 73 * hash + Objects.hashCode(this.id);
hash = 73 * hash + Objects.hashCode(this.nome);
hash = 73 * hash + Objects.hashCode(this.setor);
hash = 73 * hash + Objects.hashCode(this.pessoa);
hash = 73 * hash + Objects.hashCode(this.empresa);
hash = 73 * hash + Objects.hashCode(this.status);
hash = 73 * hash + Objects.hashCode(this.condInfracoes);
return hash;
}

@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Condutor other = (Condutor) obj;
if (!Objects.equals(this.id, other.id)) {
return false;
}
if (!Objects.equals(this.nome, other.nome)) {
return false;
}
if (!Objects.equals(this.setor, other.setor)) {
return false;
}
if (!Objects.equals(this.pessoa, other.pessoa)) {
return false;
}
if (!Objects.equals(this.empresa, other.empresa)) {
return false;
}
if (!Objects.equals(this.status, other.status)) {
return false;
}
if (!Objects.equals(this.condInfracoes, other.condInfracoes)) {
return false;
}
return true;
}

@Override
public String toString() {
return this.nome;
}

@Override
public Serializable getId() {
return id;
}

}

实体 CondutorInfracao:

@Entity
@Table(name = "condutorinfracao")
//@org.hibernate.annotations.Entity(dynamicUpdate = true)
@DynamicUpdate(value = true)
//@SelectBeforeUpdate(value=true)
@NamedQueries({
@NamedQuery(name = "CondutorInfracao.findAll", query = "SELECT s FROM CondutorInfracao s"),
@NamedQuery(name = "CondutorInfracao.findByCondutorInfracaoId", query = "SELECT s FROM CondutorInfracao s WHERE s.id = :id"),
@NamedQuery(name = "CondutorInfracao.teste", query = "SELECT s.condutor, ss.id FROM CondutorInfracao s join s.condutor ss"),
@NamedQuery(name = "CondutorInfracao.testeData", query = "SELECT ss.id, s.condutor,s.dataInfracao,s.linha,s.valor_infracao FROM CondutorInfracao s join s.condutor ss where s.dataInfracao between :dataInicial and :dataFinal"),})
public class CondutorInfracao implements Serializable, EntidadeBase {

private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "idCondInf")
private Integer id;
@Column(name = "dataInfracaoCondInf")
@Temporal(javax.persistence.TemporalType.DATE)
private Date dataInfracao;
@Column(name = "valorCondInf")
BigDecimal valor_infracao;
@Lob
@Column(name = "anexoCondInf")
private byte[] anexo;
@Column(name = "anexoExtCondInf")
private String extensaoArquivo;
@Column(name = "anexoNomeCondInf")
private String nomeArquivo;
@ManyToOne
@JoinColumn(name = "condutorCondInf", referencedColumnName = "idCondutor")
private Condutor condutor;

@ManyToOne
@JoinColumn(name = "linhaCondInf", referencedColumnName = "idLinha")
private Linha linha;
@ManyToOne
@JoinColumn(name = "infracaoCondInf", referencedColumnName = "idInfracao")
private Infracao infracao;

public Date getDataInfracao() {
return dataInfracao;
}

public void setDataInfracao(Date dataInfracao) {
this.dataInfracao = dataInfracao;
}

public Condutor getCondutor() {
return condutor;
}

public Linha getLinha() {
return linha;
}

public void setLinha(Linha linha) {
this.linha = linha;
}

public String getExtensaoArquivo() {
return extensaoArquivo;
}

public void setExtensaoArquivo(String extensaoArquivo) {
this.extensaoArquivo = extensaoArquivo;
}

public String getNomeArquivo() {
return nomeArquivo;
}

public void setNomeArquivo(String nomeArquivo) {
this.nomeArquivo = nomeArquivo;
}

public byte[] getAnexo() {
return anexo;
}

public void setAnexo(byte[] anexo) {
this.anexo = anexo;
}

public void setCondutor(Condutor condutor) {
this.condutor = condutor;
}

public Infracao getInfracao() {
return infracao;
}

public void setInfracao(Infracao infracao) {
this.infracao = infracao;
}

@Override

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

// public long getCondutor_id() {
// return condutor_id;
// }
//
// public void setCondutor_id(long condutor_id) {
// this.condutor_id = condutor_id;
// }
//
// public long getInfracao_id() {
// return infracao_id;
// }
//
// public void setInfracao_id(long infracao_id) {
// this.infracao_id = infracao_id;
// }
public BigDecimal getValor_infracao() {
return valor_infracao;
}

public void setValor_infracao(BigDecimal valor_infracao) {
this.valor_infracao = valor_infracao;
}

@Override
public int hashCode() {
int hash = 7;
hash = 29 * hash + Objects.hashCode(this.id);
hash = 29 * hash + Objects.hashCode(this.valor_infracao);
hash = 29 * hash + Objects.hashCode(this.condutor);
hash = 29 * hash + Objects.hashCode(this.infracao);
return hash;
}

@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final CondutorInfracao other = (CondutorInfracao) obj;
if (!Objects.equals(this.id, other.id)) {
return false;
}
if (!Objects.equals(this.valor_infracao, other.valor_infracao)) {
return false;
}
if (!Objects.equals(this.condutor, other.condutor)) {
return false;
}
if (!Objects.equals(this.infracao, other.infracao)) {
return false;
}
return true;
}

}

saveButtton 代码:

 private void saveButtonActionPerformed(java.awt.event.ActionEvent evt)    {                                           

CondutorInfracao condutorInfracao = new CondutorInfracao();
condutorInfracao.setCondutor((Condutor) jCCondutor.getSelectedItem());
condutorInfracao.setInfracao((Infracao) jCInfracaoDescr.getSelectedItem());
condutorInfracao.setLinha((Linha) jCLinhaDescr.getSelectedItem());


condutorInfracao.setDataInfracao(dataParaInserir(data));
System.out.println("DATA " +dataParaInserir(data));
Locale brasil = new Locale("pt", "BR");
NumberFormat nf = NumberFormat.getCurrencyInstance(brasil);
String str = valorField.getText();
Number str2 = null;
try {
str2 = nf.parse(str);
} catch (ParseException ex) {
Logger.getLogger(CondutorInfracaoView.class.getName()).log(Level.SEVERE, null, ex);
}
BigDecimal bd = new BigDecimal(str2.doubleValue());
BigDecimal ajusted = bd.setScale(nf.getMaximumFractionDigits(), BigDecimal.ROUND_HALF_UP);
condutorInfracao.setValor_infracao(ajusted);


try {
CondutorInfracaoDao ci = new CondutorInfracaoDao();
ci.save(condutorInfracao);
JOptionPane.showMessageDialog(null, "Gravado !");
modelo.limpaLista();
preencherTabela();
} catch (Exception erro) {
JOptionPane.showMessageDialog(null, "Erro na Gravação:" + erro);
}
refresh();
clearSelection();

填充jComboBox的方法:

  public void loadComboCondutorDescr() {
AutoCompleteDecorator.decorate(this.jCCondutor);
CondutorDao condutorDao = new CondutorDao();
List<Condutor> listaCondutores = condutorDao.consultarCondutores();//cria uma lista para receber a lista vindo do dao
for (Condutor set : listaCondutores) {
jCCondutor.addItem(set);
}
}

CondutorDao:

public List<Condutor> consultarCondutores() {
EntityManager em = getEm();
List<Condutor> listaCondutores;
try {
Query q = em.createNamedQuery("Condutor.findAll");
listaCondutores = q.getResultList();
} catch (Exception e) {
listaCondutores = new ArrayList<>();

} finally {
em.close();

}
return listaCondutores;

最佳答案

在这种情况下,将组合框列表填充到数据库中。

 public void loadComboStudent() {
AutoCompleteDecorator.decorate(this.jCStudent);
StudentDao studentDao = new StudentDao();
List<Student> listaStudents = studentDao.consultarStudents();
for (Student set : listaStudents) {
jCStudent.addItem(set);
oc.save(set );
}
}

将这个 listaStudents 保存到数据库中。

关于java - 具有相同名称的实体,始终为第一个 id 插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36555069/

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