我正在嘗試讓我的 Spring Boot 后端執行 INNER JOIN 查詢,然后我可以在我的 Angular 前端中顯示來自該查詢的資料。
Spring Boot 說我:“引起:org.hibernate.hql.internal.ast.QuerySyntaxException:角色未映射”“角色未映射[SELECT name,apellidos,fechaturno,medico FROM persona c INNER JOIN turnos c1 ON c。 id = c1.idturno]"
物體/類“角色”
@Entity @Table(name="persona")
public class Persona {
@Id @Column @GeneratedValue(strategy=GenerationType.IDENTITY) private int id;
@Column private String name;
@Column private String apellidos;
@OneToMany(mappedBy = "persona")
List<Turno> turnos;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getApellidos() {
return apellidos;
}
public void setApellidos(String apellidos) {
this.apellidos = apellidos;
}
public List<Turno> getTurnos() {
return turnos;
}
public void setTurnos(List<Turno> turnos) {
this.turnos = turnos;
}
}
PersonaServiceImp
@Service
public class PersonaServiceImp implements PersonaService{
@Autowired
private PersonaRepositorio repositorio;
@Override
public List<Persona> listar() {
return repositorio.findAll();
}
@Override
public Persona listarId(int id) {
return repositorio.findByid(id);
}
@Override
public Persona add(Persona p) {
return repositorio.save(p);
}
@Override
public Persona edit(Persona p) {
return repositorio.save(p);
}
@Override
public Persona delete(int id) {
Persona p = repositorio.findByid(id);
if(p!=null){
repositorio.delete(p);
}
return p;
}
}
物體/類“Turno”
@Entity
@Table(name = "turnos")
public class Turno {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "idturno")
private int idturno;
@Column(name = "fechaturno")
private String fechaturno;
@Column(name = "medico")
private String medico;
@ManyToOne
private Persona persona;
public Turno(){
}
public int getIdturno() {
return idturno;
}
public void setIdturno(int idturno) {
this.idturno = idturno;
}
public String getFechaturno() {
return fechaturno;
}
public void setFechaturno(String fechaturno) {
this.fechaturno = fechaturno;
}
public String getMedico() {
return medico;
}
public void setMedico(String medico) {
this.medico = medico;
}
public Persona getPersona() {
return persona;
}
public void setPersona(Persona persona) {
this.persona = persona;
}
}
現在,服務/存盤庫“Persona Repositorio”
public interface PersonaRepositorio extends JpaRepository<Persona, Integer> {
//list all person
List<Persona>findAll();
//list one person
Persona findByid(int id);
//save changes news or update
Persona save(Persona p);
//delete
void delete(Persona p);
}
角色服務
@Service
public interface PersonaService {
// object type list
List<Persona>listar(); //list all person
Persona listarId(int id); //list one person
Persona add(Persona p);//add one person
Persona edit(Persona p);//edit one person
Persona delete(int id);//delete one person
}
和 Turno 存盤庫(我認為我必須在其中進行查詢)
@Repository
public interface TurnoRepository extends JpaRepository<Turno, Integer> {
@Query("SELECT name,apellidos,fechaturno,medico FROM persona c INNER JOIN turnos c1 ON c.id = c1.idturno")
List<Turno> findByIdturno(int idturno);
Turno findById(int idturno);
}
背景關系:關系是一個人可以有很多班次,并且在查詢時會帶上班次的日期和對應的醫生的人的姓名和姓氏
但我無法讓它進行查詢
從 Inner Join 查詢中獲取資料,以在 Angular 中顯示資訊。
uj5u.com熱心網友回復:
我有點困惑,你想要實作什么。
- 如果您試圖通過角色 id 查找 turnos,那么請執行此操作,它會在后臺為您完成連接。
List<Turno> findAllByPersonaId(int id);
- 如果你想得到所有的turno,只需這樣做。(可能不是,因為你想加入)
List<Turno> findAll();
- 如果您想通過 Persona 查找所有 Turno 并同時檢索 Persona 資料,請執行以下操作:
a,創建一個投影,其中包含您要檢索的必要資訊:(如:https ://docs.spring.io/spring-data/jpa/docs/current/reference/html/#projections )
public interface TurnoPersonaProjection {
String getName();
String getApellidos();
String getFechaturno();
String getMedico()
}
b,然后使用查詢檢索投影:
@Query("SELECT p.name,p.apellidos,c.fechaturno,c.medico FROM Turno t INNER JOIN Persona p ON t.idturno = p.id WHERE p.id = :personaId")
List<TurnoPersonaProjection> findTurnoPersonaProjectionByPersonaId(int personaId);
PS:請用英文開發
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/524815.html
標籤:爪哇弹簧靴后端
上一篇:定義字謎Python
