我正在使用Spring Boot,Thymeleaf,Hibernate和JPA來開發此應用程序。我已經映射了我需要從中檢索數據的兩個實體之間的關係,並且想知道如何顯示客戶查看其訂單的頁面上的兩個表中的數據。Thymeleaf:在同一頁上顯示來自兩個JPA實體表的數據
在我的控制器類中,我將對象"viewmyorders"
添加到ModelAndView,它將包含來自兩個表/實體的HQL查詢的結果。我應該在Thymeleaf模板上使用什麼語法來在頁面上顯示數據?這兩個表格的結果是否會以 "${viewmyorder.}"
?在"."
之後 - 數據庫中相關列的名稱?
幫助感謝!
訂單類別:
@Entity
@Table(name = "orders")
public class Orders {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "orderno")
private int id;
@Column(name = "item_name")
private String itemName;
@Column(name = "description")
private String itemDescription;
@Column(name = "cost")
private String cost;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "orderId")
private Customer customerInfo;
//getters and setters
}
Customer類:
@Entity
@Table(name = "customer")
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "cust_id")
private int cust_id;
@Column(name = "fName")
private String firstName;
@Column(name = "surName")
private String surName;
@Column(name = "address")
private String address;
@Column(name = "phone")
private String phone;
@Column(name = "orderId")
private int orderId;
@Column(name = "active")
private int isactive;
@OneToOne(mappedBy="customerInfo")
private Orders orderInfo;
//getters and setters
}
庫類:
public interface OrderRepository extends JpaRepository<Orders, Integer> {
//customerInfo is the object (of type orders) which maps the relationship between the two entities
String MYORDERQUERY = "SELECT ord, cust from Orders ord inner join ord.customerInfo cust";
@Query(MYSWAPSQUERY)
List<Orders> findMyOrders();
}
控制器方法:
@RequestMapping(value={"/viewmyorders"}, method = RequestMethod.GET)
public ModelAndView viewOrders(){
ModelAndView modelAndView = new ModelAndView();
//orderService calls method above from Repository class to return order info
modelAndView.addObject("viewmyorders", orderService.listAllOrders());
return modelAndView;
}
表Thymeleaf模板頁:
<table class="table table-striped">
<tr>
<th>Order Number</th>
<th>Product Description</th>
<th>Delivery Address</th>
<th>Contact Number</th>
</tr>
<tr th:each="viewmyorder : ${viewmyorders}">
<td th:text="${viewmyorder.orderno}"></td>
<td th:text="${viewmyorder.description}"></td>
<td th:text="${viewmyorder.address}"></td>
<td th:text="${viewmyorder.phone}"></td>
</tr>
</table>
在你的控制器,你缺一「,從ADDOBJECT方法是什麼。您的orderService.listAllOrders()方法是否會調用OrderRepository的findAll()或您的自定義findMyOrders查詢?您在存儲庫中指定MYORDERQUERY字符串,但將MYSWAPSQUERY添加爲您的自定義查詢的參數。即使這個查詢看起來無效,我認爲它應該是這樣的...如果我假設你的另一個實體被稱爲Customer並且它有一個info列,那麼inner join Customer cust on ord.customerInfo = cust.info。請提供更多代碼並清除現有的代碼庫。 –
爲了確切的問題,我將創建一個DTO類,它包含兩個實體所有的字段,並使findMyOrders()查詢的返回類型成爲該DTO對象的列表,例如,列表。然後,您可以將該列表添加到控制器中的modelAndView中,並可以將它的字段稱爲objectName.fieldName –
謝謝我會試試。我很驚訝,有必要有一個類來表示來自兩個數據庫表的屬性來解決這個問題。我在他們各自的模型類中映射了Customer表和Orders表之間的關係。關於我上面的查詢,在使用HQL時不需要「加入」。 – James