Método find Hibernate
El string de la consulta funciona Ok en la consola, pero en el método que realize en hibernate no esta funcionando, alguien me puede
decir como recuperar la lista de objetos apartir de ese String
Las tablas padres son compras y terceros.
La tabla union tse llama compras_terceros.
La asociación que tengo es ManyToMany con una dirección de compras a terceros.
Saludos espero sus recomendaciones y ayuda :D
- Inicie sesión o regístrese para enviar comentarios
Será por 2 cosas 1.- Tu
Será por 2 cosas
1.- Tu consulta está hecha en SQL .... si quieres que funcione en Hibernate (o JPA) tendría que ser algo como
Algo así, digo, me estoy imaginando que los objetos que coloco reflejan el nombre de las tablas que tienes..
o bien,
2.-
En lugar de :
Tendría que ser
Esta es mi clase compra
clase compra.
Estoy confundido neko en cual es el nombre correcto para la tabla compras_terceros, como realizar consultas a esa tabla(Desde hibernate).
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.NotNull;
import org.hibernate.annotations.Cascade;
@Entity
@javax.persistence.Table(name="compras")
public class Compra {
private Long idCompra;
private java.util.Date fecha;
private double precio;
private String tipo;
private int peso;
private double total;
private List<Tercero> tercero = new ArrayList<Tercero>();
private Campo campo;
private String variedad;
@Id
@GeneratedValue
@Column(name="idCompra")
public Long getId() {
return idCompra;
}
public void setId(Long idCompra) {
this.idCompra = idCompra;
}
@Basic
@Temporal(TemporalType.DATE)
@Column(name="fecha")
@NotNull
public java.util.Date getFecha() {
return fecha;
}
public void setFecha(java.util.Date fecha) {
this.fecha = fecha;
}
@Column(name="precio")
@NotNull
public double getPrecio() {
return precio;
}
public void setPrecio(double precio) {
this.precio = precio;
}
@Column(name="tipo")
@NotNull
public String getTipo() {
return tipo;
}
public void setTipo(String tipo) {
this.tipo = tipo;
}
@Column(name="peso")
@NotNull
public int getPeso() {
return peso;
}
public void setPeso(int peso) {
this.peso = peso;
}
@Column(name="total")
@NotNull
public double getTotal() {
return total;
}
public void setTotal(double total) {
this.total = total;
}
@ManyToMany
@JoinTable(
name="compras_terceros",
joinColumns = { @JoinColumn(name = "compras_idCompra") },
inverseJoinColumns = { @JoinColumn( name ="terceros_idTercero" )}
)
@NotNull
public List<Tercero> getTercero() {
return tercero;
}
public void setTercero(List<Tercero> tercero) {
this.tercero = tercero;
}
@ManyToOne(cascade = {CascadeType.MERGE, CascadeType.ALL},targetEntity=Campo.class)
@Cascade( { org.hibernate.annotations.CascadeType.SAVE_UPDATE,org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
@JoinColumn(name="idLote")
@NotNull
public Campo getCampo() {
return campo;
}
public void setCampo(Campo campo) {
this.campo = campo;
}
@Column(name="variedad")
@NotNull
public String getVariedad() {
return variedad;
}
public void setVariedad(String variedad) {
this.variedad = variedad;
}
}
En ésta
En ésta relación
@JoinTable(
name="compras_terceros",
joinColumns = { @JoinColumn(name = "compras_idCompra") },
inverseJoinColumns = { @JoinColumn( name ="terceros_idTercero" )}
)
Las JoinColumn
"compras_idCompra"
y"terceros_idTercero"
son los nombres de las columnas en la base de datos? si es así cámbialos por las propiedades del objeto que corresponde, que me imagino que son de tu claseTercero
... y viendo tu mapeo entonces sólo necesitarías hacer el query¿Por qué se resume así? porqué en tu clase ya estás definiendo los objetos que se están relacionando, y el campo que sirve de llave foránea...