Hola
Tipdar y
FuzzyLog en base a lo que me dijeron me salió esto:
Hibernate:
insert
into
ventas
(estId, SuId, artId, suId)
values
(?, ?, ?, ?)
abr 22, 2017 11:57:06 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 1110, SQLState: 42000
abr 22, 2017 11:57:06 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: Column 'suId' specified twice
abr 22, 2017 11:57:06 PM org.hibernate.engine.jdbc.batch.internal.AbstractB atchImpl release
INFO: HHH000010: On release of batch it still contained JDBC statements
abr 22, 2017 11:57:06 PM org.hibernate.internal.ExceptionMapperStandardImpl mapManagedFlushFailure
ERROR: HHH000346: Error during managed flush [org.hibernate.exception.SQLGrammarException: could not execute statement]
Con eso descubrí el gran error porque mi tabla ventas tiene 2 claves primarias que a la vez son foráneas y otra foránea y no 4.
ventas(
suId,
artId,estId)
pero no sé cómo rayos solucionar esto xq había visto algo sobre clase embebidas para este tipo de tablas pero ahora eso es lo que me está complicando.
Código Java:
Ver originalpackage app.model.entity;
import app.contr.util.Conversiones;
import java.io.Serializable;
import java.util.*;
import javax.persistence.*;
import up.max.proyectpages.structs.PagesList;
@Table(name = "subastas")
@NamedQueries({
@NamedQuery(name = "subasta.findAll",query = "select s from Subasta s"),
@NamedQuery(name = "subasta.maxId",query = "select max(s.id)+1 from Subasta s"),
@NamedQuery(name = "subasta.search",query="select s from Subasta s "
+ "where s.direccion.nombre like :criterio or s.subastador.ape1 like :criterio")
})
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "suId")
private int id;
@Column(name = "suFecha")
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "dirId")
private Direccion direccion;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "subId")
private Subastador subastador;
@OneToMany(mappedBy = "subasta",cascade = CascadeType.ALL)
private List<Venta>ventas;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
return fecha;
}
this.fecha = fecha;
}
public Direccion getDireccion() {
return direccion;
}
public void setDireccion(Direccion direccion) {
this.direccion = direccion;
}
public Subastador getSubastador() {
return subastador;
}
public void setSubastador(Subastador subastador) {
this.subastador = subastador;
}
public void setVentas(List<Venta> ventas) {
this.ventas = ventas;
}
public PagesList<Venta>getVentas(){
PagesList<Venta>p = new PagesList(ventas);
return p;
}
public void addVenta(Venta v){
ventas.add(v);
}
public void delVenta(Venta v){
ventas.remove(v);
}
public Subasta() { }
public Subasta
(int id,
GregorianCalendar fecha, Direccion xdireccion, Subastador xsubastador
) { this.id = id;
this.fecha = fecha;
this.direccion = xdireccion;
this.subastador = xsubastador;
}
@Override
public boolean equals
(Object obj
) { if(obj instanceof Subasta){
Subasta objs = (Subasta)obj;
return objs.subastador.equals(this.subastador) && objs.fecha.equals(this.fecha);
} else {
return false;
}
}
@Override
public int hashCode() {
int hash = 17;
hash = 31 * hash + this.fecha.hashCode();
hash = 31 * hash + this.subastador.hashCode();
return hash;
}
@Override
return Conversiones.MostrarFechaYHora(fecha) + " -> " + direccion.toString();
}
}
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 subasta;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "artId")
private Artefacto obja;
public Subasta getObjs(){
return subasta;
}
public void setObjs(Subasta objs) {
this.subasta = objs;
}
public Artefacto getObja() {
return obja;
}
public void setObja(Artefacto obja) {
this.obja = obja;
}
public VentaKey(){}
public VentaKey(Subasta xobjs, Artefacto xobja) {
this.subasta = xobjs;
this.obja = xobja;
}
@Override
public boolean equals
(Object obj
){ if(obj instanceof VentaKey){
VentaKey id =(VentaKey)obj;
return id.subasta.equals(this.subasta) && id.obja.equals(this.obja);
} else {
return false;
}
}
@Override
public int hashCode(){
int hash = 17;
hash = 31 * hash + this.subasta.hashCode();
hash = 31 * hash + this.obja.hashCode();
return hash;
}
}
Lo peor de todo es que esto me hace replantear todo lo hecho hasta ahora, cómo resolverían esto??
Espero sus respuestas y Saludos.