gpt4 book ai didi

java - 尝试在 Thymeleaf Spring Boot 中迭代 List() 时出现 "Exception evaluating SpringEL expression"错误
转载 作者:行者123 更新时间:2023-12-01 17:31:57 25 4
gpt4 key购买 nike

我是 Spring Boot 新手,并尝试使用 JPA/JPQL 在两个不相关的实体(事务和项目)之间进行联接。但是在使用 thymeleaf 以表格格式显示它时出现以下错误:

2020-04-08 21:42:42.463 ERROR 73816 --- [nio-8080-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "transactiondetail.tid" (template: "index" - line 27, col 21)] with root cause
org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'tid' cannot be found on object of type 'java.lang.Object[]' - maybe not public or not valid?

以下是我的 thymeleaf 实现:

    <tr th:each="transactiondetail : ${listTransactionDetail}">
<td th:text="${transactiondetail.tid}">TID</td>
<td th:text="${transactiondetail.from_uid}">From UID</td>
<td th:text="${transactiondetail.to_uid}">To UID</td>
<td th:text="${transactiondetail.item_name}">Item Name</td>
<td th:text="${transactiondetail.item_count}">Count</td>
<td th:text="${transactiondetail.status}">Status</td>

以下是 Controller :

@Autowired
QueryService queryservice;

@RequestMapping("/")
public String viewHomePage(Model model) {
List<TransactionDetail> listTransactionDetail = queryservice.JPQLQuery();
model.addAttribute("listTransactionDetail", listTransactionDetail);
return "index";
}

只要返回 queryservice.JPQLQuery() 就可以得到结果,这意味着加入和列出正在工作。以下是 Controller 正在调用的服务:

@Service
public class QueryService implements IQueryService {

@Autowired
EntityManagerFactory emf;

@Override
public List<TransactionDetail> JPQLQuery()
{
EntityManager em = emf.createEntityManager();

Query query = em.createQuery("Select s.tid,s.from_uid,s.to_uid,d.item_name,s.item_count,s.status from Transaction s inner join Item d on s.item_id=d.item_id");
@SuppressWarnings("unchecked")
List<TransactionDetail> tranlist = (List<TransactionDetail>)query.getResultList();
em.close();
return tranlist;

}

}

下面显示的是接受连接实体的 TransactionDetail 类。正如您所看到的,我有带有正确名称的构造函数和 getter/setter。仍然无法正确显示详细信息。

public class TransactionDetail {
private Long tid;
private int from_uid;
private int to_uid;
private String item_name;
private int item_count;
private int status;

public TransactionDetail() {
}

public TransactionDetail(Long tid, int from_uid, int to_uid, String item_name, int item_count, int status) {
super();
this.tid = tid;
this.from_uid = from_uid;
this.to_uid = to_uid;
this.item_name = item_name;
this.item_count = item_count;
this.status = status;
}

public Long getTid() {
return tid;
}

public void setTid(Long tid) {
this.tid = tid;
}

public int getFrom_uid() {
return from_uid;
}
public void setFrom_uid(int from_uid) {
this.from_uid = from_uid;
}

public int getTo_uid() {
return to_uid;
}
public void setTo_uid(int to_uid) {
this.to_uid = to_uid;
}

public int getItem_count() {
return item_count;
}
public void setItem_count(int item_count) {
this.item_count = item_count;
}

public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}

public String getItem_name() {
return item_name;
}

public void setItem_name(String item_name) {
this.item_name = item_name;
}

}

我猜测问题与我保存 query.getResultList() 结果的方式有关。进入List<TransactionDetail> 。那么我知道如何解决这个问题吗?提前致谢!

最佳答案

您的Query正在返回ListObject 。然而,EntityManager 有一个重载,如下所示:

public <T> TypedQuery<T> createQuery(String qlString, Class<T> resultClass);

通过使用第二个参数,您的结果将不需要转换为 List<TransactionDetail> ,因此您应该向 createQuery 方法添加第二个参数,在您的情况下它将是 TransactionDetails.class .

关于java - 尝试在 Thymeleaf Spring Boot 中迭代 List(<Object>) 时出现 "Exception evaluating SpringEL expression"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61103169/

25 4 0