gpt4 book ai didi

java - 实体表未映射

转载 作者:行者123 更新时间:2023-12-01 19:31:56 24 4
gpt4 key购买 nike

我是 Springboot 新手,在使用 JPQL 语句从实体表中检索条目时遇到了挑战。

我正在运行一个小型 Spring Web 项目,Postman 对我的 Java API 的调用应该返回一个“Tour”实体。问题是,当我使用 em.find(Entity.class, PrimaryKey) 时,检索实体没有问题,但当我使用 JPQL 语句 "SELECT t FROMtour t WHERE t.employee.empName = ?1" 它抛出一个异常,基本上表明实体表未映射。

关于如何克服这个问题有什么建议吗?

相关代码:API方法

@CrossOrigin
@GetMapping(value = "/test")
public ResponseEntity<Tour> testMethod(@RequestBody String name){

Tour t = null;;
try {
t = service.getTour(name);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return new ResponseEntity<Tour>(t, HttpStatus.OK);
}

服务方式

public Tour getTour(String name) throws Exception{
Tour t = dao.getTour(name);

if(t == null) {
throw new Exception("Service.TOUR_NOT_FOUND");
}

return t;
}

DAO方法

public Tour getTour(String name) {
String sql = "SELECT t FROM tour t WHERE t.employee.empName = ?1";
Query q = em.createQuery(sql);
q.setParameter(1, name);

TourEntity te = (TourEntity) q.getSingleResult();

Tour t = new Tour();
Employee e = new Employee();
ArrayList<Visitor> vl = new ArrayList<Visitor>();

for(VisitorEntity ve : te.getVisitors()) {
Visitor v = new Visitor();
v.setVisitorId(ve.getId());
v.setName(ve.getName());
v.setEmail(ve.getEmail());
v.setCompany(ve.getCompany());
v.setFeedback(ve.getFeedback());
v.setDesignation(ve.getDesignation());
v.setPhoneNo(ve.getPhone());

vl.add(v);
}

e.setEmpId(te.getEmployee().getEmpId());
e.setName(te.getEmployee().getEmpName());
e.setDesignation(te.getEmployee().getDesignation());
if(te.getEmployee().getIsAdmin().equals("Y")) {
e.setAdmin(true);
}else {
e.setAdmin(false);
}
e.setEmail(te.getEmployee().getEmail());
e.setPassword(te.getEmployee().getPassword());

t.setTourId(te.getId());
t.setFeedback(te.getFeedback());
t.setVisitor(vl);
t.setEmployee(e);
t.setTourDate(te.getTourDate().toLocalDate());

return t;
}

实体类

@Entity
@Table(name="tour")
public class TourEntity {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
private String name;
@Column(name="tour_date")
private Date tourDate;
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name="employee_id")
private EmployeeEntity employee;
private String feedback;
@OneToMany(targetEntity=VisitorEntity.class)
@JoinColumn(name="id")
private List<VisitorEntity> visitor;

**Getters & Setters**

@Entity
@Table(name="Employee")
public class InfoscionEntity {
@Id
@Column(name="emp_id")
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer empId;
@Column(name="empname")
private String empName;
private String email;
private String designation;
private String password;
@Column(name="isadmin")
private String isAdmin;

**Getters and Setters**

谢谢。

最佳答案

感谢@XtremeBaumer,我发现JPQL将实体类名称转换为表名称。

查询应该是:SELECT t FROM TourEntity WHERE....

关于java - 实体表未映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59252268/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com