Hey
FuzzyLog depurando el sistema ahora no muestra elementos nulos en la clase Venta pero me da el mismo error, estoy comenzando a pensar que el problema está en la clase Venta o VentaKey (clase que uso para la relación N a N)
Código Java:
Ver originalpackage app.model.entity;
import java.io.Serializable;
import java.util.List;
import javax.persistence.*;
@Table(name = "ventas")
{
@EmbeddedId
private VentaKey key;
@JoinColumns({
@JoinColumn(name = "SuId",referencedColumnName = "suId"),
})
@ManyToOne(cascade = CascadeType.ALL)
private Subasta subasta;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "estId")
private Estado obje;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "venta")
private List<Registro>registros;
public Subasta getSubasta() {
return subasta;
}
public void setSubasta(Subasta subasta) {
this.subasta = subasta;
}
public VentaKey getKey() {
return key;
}
public void setKey(VentaKey key) {
this.key = key;
}
public Estado getObje() {
return obje;
}
public void setObje(Estado obje) {
this.obje = obje;
}
public List<Registro> getRegistros() {
return registros;
}
public void setRegistros(List<Registro> registros) {
this.registros = registros;
}
public Venta() { }
public Venta(Subasta xobjs, Artefacto xobja, Estado obje) {
this.key = new VentaKey(xobjs,xobja);
this.subasta = xobjs;
this.obje = obje;
}
@Override
public boolean equals
(Object obj
) { if(obj instanceof Venta){
Venta v =(Venta)obj;
return v.key.getObja() == this.key.getObja() && v.obje.equals(this.obje);
} else {
return false;
}
}
@Override
public int hashCode() {
int hash = 17;
hash = 31 * hash + this.key.getObja().hashCode();
hash = 31 * hash + this.obje.hashCode();
return hash;
}
@Override
return this.key.getObja().getNombre() + " - estado: " + this.obje.getNombre();
}
}
Código Java:
Ver originalpackage app.model.entity;
import java.io.Serializable;
import javax.persistence.*;
@Embeddable
{
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "suId")
private Subasta objs;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "artId")
private Artefacto obja;
public Subasta getObjs(){
return objs;
}
public void setObjs(Subasta objs) {
this.objs = objs;
}
public Artefacto getObja() {
return obja;
}
public void setObja(Artefacto obja) {
this.obja = obja;
}
public VentaKey(){}
public VentaKey(Subasta xobjs, Artefacto xobja) {
this.objs = xobjs;
this.obja = xobja;
}
@Override
public boolean equals
(Object obj
){ if(obj instanceof VentaKey){
VentaKey id =(VentaKey)obj;
return id.objs.equals(this.objs) && id.obja.equals(this.obja);
} else {
return false;
}
}
@Override
public int hashCode(){
int hash = 17;
hash = 31 * hash + this.objs.hashCode();
hash = 31 * hash + this.obja.hashCode();
return hash;
}
}
Por otro lado hice lo que me dijiste quedandome el formulario así:
Código Java:
Ver originalprivate void btnaceptarActionPerformed
(java.
awt.
event.
ActionEvent evt
) { if(this.dtfecsubasta.getCalendar() == null || this.txtdirsubasta.getText().isEmpty() || this.txtsubsubasta.getText().isEmpty()){
Mensajes.MostrarAdvertencia("Ingrese los datos obligatorios (*)");
} else {
if(accion.equals("crear")){
try {
Direccion d = FacadeContr.getInstance().manDirecciones().findByX(this.txtdirsubasta.getText());
Subastador s = FacadeContr.getInstance().manSubastadores().findByX(this.txtsubsubasta.getText());
Subasta sub = new Subasta(Conversiones.CInt(this.txtnrosubasta.getText()), this.getDateTime(), d, s);
FacadeContr.getInstance().manSubastas().add(sub);
Mensajes.MostrarConfirmacion("Subasta Creada");
ventana.setTitle("Editar Subasta");
accion = "editar";
objs = FacadeContr.getInstance().manSubastas().findById(sub.getId());
Mensajes.MostrarAdvertencia(ex.getMessage());
}
} else {
try {
Direccion d = FacadeContr.getInstance().manDirecciones().findByX(this.txtdirsubasta.getText());
Subastador s = FacadeContr.getInstance().manSubastadores().findByX(this.txtsubsubasta.getText());
Subasta sub = new Subasta(Conversiones.CInt(this.txtnrosubasta.getText()), this.getDateTime(), d, s);
sub.setVentas(objs.getVentas().toList());
sub.getVentas().toList().forEach((v) -> {
v.setSubasta(sub);
});
FacadeContr.getInstance().manSubastas().edit(sub);
Mensajes.MostrarConfirmacion("Subasta Editada");
btncancelarActionPerformed(evt);
Mensajes.MostrarAdvertencia(ex.getMessage());
}
}
}
}
Así tengo la parte de ediciones de las entidades:
Código Java:
Ver originalpublic void edit
(T entity
) throws Exception { if(this.checkUpdate(entity)){
ss.beginTransaction();
ss.merge(entity);
ss.getTransaction().commit();
}
}
Espero sus respuestas y saludos.