抱歉打扰你。我是jpa和hibernate的新手,所以我对typequery有一些问题。我有一个函数,它返回一个字符串,一个“Departamento”的名字,并重新找到与它有关联的“Departamento”的对象(“Carrera”)。在sqldeveloper我没有问题,但在typedquery中它已经变得有点麻烦。我确信我的查询的sintax是错误的,我不知道如何解决。如果有人可以帮助我,我会很高兴。
ClientePrueba.java
package com.cliente;
import java.util.List;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import com.entities.Carrera;
import com.entities.Departamento;
import com.entities.Materia;
import com.exception.ServiciosException;
import com.servicios.CarrerasBeanRemote;
import com.servicios.DepartamentosBeanRemote;
import com.servicios.MateriasBeanRemote;
public class ClientePrueba {
public static void main(String[] args) throws NamingException{
DepartamentosBeanRemote departamentosBean = (DepartamentosBeanRemote) InitialContext.doLookup("EjemploEJB/DepartamentosBean!com.servicios.DepartamentosBeanRemote");
MateriasBeanRemote materiasBean = (MateriasBeanRemote) InitialContext.doLookup("EjemploEJB/MateriasBean!com.servicios.MateriasBeanRemote");
CarrerasBeanRemote carrerasBean = (CarrerasBeanRemote) InitialContext.doLookup("EjemploEJB/CarrerasBean!com.servicios.CarrerasBeanRemote");
System.out.println("Obtengo todas las carreras del departamento MATEMATICAS");
List<Carrera> carreras = carrerasBean.obtenerPorDepartamento("MATEMATICAS");
for (Carrera car : carreras){
System.out.println(car.getNombre());
}
}
}
CarrerasBean.java
package com.servicios;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceException;
import javax.persistence.TypedQuery;
import com.entities.Carrera;
import com.entities.Departamento;
import com.entities.Materia;
import com.exception.ServiciosException;
/**
* Session Bean implementation class CarrerasBean
*/
@Stateless
public class CarrerasBean implements CarrerasBeanRemote {
@PersistenceContext
private EntityManager em;
/**
* Default constructor.
*/
public CarrerasBean() {
// TODO Auto-generated constructor stub
}
@Override
public List<Carrera> obtenerPorDepartamento(String departamento) {
TypedQuery<Carrera> query = em.createQuery("SELECT c FROM Carrera c WHERE c.departamento.nombre = :depto", Carrera.class).setParameter("depto", departamento);
return query.getResultList();
}
}
Carrera.java
package com.entities;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.*;
/**
* Entity implementation class for Entity: Carrera
*
*/
@Entity
public class Carrera implements Serializable {
private static final long serialVersionUID = 1L;
@Id
//@GeneratedValue(strategy=GenerationType.AUTO)
@SequenceGenerator(name="Carrera", sequenceName="SEQ_ID_CARRERA", allocationSize= 1)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="Carrera")
private Long id;
@Column(length=40)
private String nombre;
@ManyToOne(optional=false)
private Departamento departamento;
@OneToMany
private List<Materia> materias = new ArrayList<>();
public Carrera() {
super();
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public Departamento getDepartamento() {
return departamento;
}
public void setDepartamento(Departamento departamento) {
this.departamento = departamento;
}
public List<Materia> getMaterias() {
return materias;
}
public void setMaterias(List<Materia> materias) {
this.materias = materias;
}
}
Departamento.java
package com.entities;
import java.io.Serializable;
import javax.persistence.*;
/**
* Entity implementation class for Entity: Departamento
*
*/
@Entity
public class Departamento implements Serializable {
private static final long serialVersionUID = 1L;
@Id
//@GeneratedValue(strategy=GenerationType.AUTO)
@SequenceGenerator(name="Departamento", sequenceName="SEQ_ID_DEPARTAMENTO", allocationSize= 1)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="Departamento")
private Long id;
@Column(length=40)
private String nombre;
public Departamento() {
super();
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
}