title: "Exception evaluating SpringEL expression" error while trying to iterate List(<Object>) in Thymeleaf Spring Boot
body: <p>I am new to spring boot and attempting to make a join between two unrelated entities (Transaction and Item) using JPA/JPQL. But I am getting the following error while using thymeleaf to display it in a table format:</p>
  
  <pre><code>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?
  </code></pre>
  
  <p>Following is my thymeleaf implementation:</p>
  
  <pre><code>    &lt;tr th:each="transactiondetail : ${listTransactionDetail}"&gt;
          &lt;td th:text="${transactiondetail.tid}"&gt;TID&lt;/td&gt;
          &lt;td th:text="${transactiondetail.from_uid}"&gt;From UID&lt;/td&gt;
          &lt;td th:text="${transactiondetail.to_uid}"&gt;To UID&lt;/td&gt;
          &lt;td th:text="${transactiondetail.item_name}"&gt;Item Name&lt;/td&gt;
          &lt;td th:text="${transactiondetail.item_count}"&gt;Count&lt;/td&gt;
          &lt;td th:text="${transactiondetail.status}"&gt;Status&lt;/td&gt;
  </code></pre>
  
  <p>Following is the controller:</p>
  
  <pre><code>@Autowired
  QueryService queryservice; 
  
  @RequestMapping("/")
  public String viewHomePage(Model model) {
      List&lt;TransactionDetail&gt; listTransactionDetail = queryservice.JPQLQuery();
      model.addAttribute("listTransactionDetail", listTransactionDetail);
      return "index";
      }
  </code></pre>
  
  <p>I am able to get the result when I simply return <code>queryservice.JPQLQuery()</code>, which means the joining and listing is working.
  Following is the service the controller is calling:</p>
  
  <pre><code>@Service
  public class QueryService implements IQueryService {
  
      @Autowired
      EntityManagerFactory emf;
  
      @Override
      public List&lt;TransactionDetail&gt; 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&lt;TransactionDetail&gt; tranlist = (List&lt;TransactionDetail&gt;)query.getResultList();
          em.close();
          return tranlist;
  
      }
  
  }
  </code></pre>
  
  <p>Shown below is the TransactionDetail class which is taking in the joined entities. As you can see, I have both constructors and getters/setters with proper names. Still not able to display the details correctly.</p>
  
  <pre><code>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;
      }
  
  }
  </code></pre>
  
  <p>I am guessing the problem has to do with the way I am saving the results from <code>query.getResultList()</code> into <code>List&lt;TransactionDetail&gt;</code>. So any idea how I can solve this issue? Thanks in advance! </p>