如何使用CrudRepository和thymeleaf实现多关系?

时间:2016-03-31 09:33:10

标签: java spring-boot spring-data-jpa thymeleaf

我正在使用带有CrudRepository的JPA。我在客户和账单之间存在着一种关系。客户逐渐收到我想分配给客户的账单。

<div class="col-lg-3">
    <select name="customers" class="form-control m-bot15" required="">
        <option value="">*** Bitte auswählen ***</option>
        <option th:each="customer : ${customers}" th:value="${customer.customerID}" th:text="${customer.name}"></option>
    </select>
</div>

我在表单中使用此代码段来显示客户并通过引用其名称来插入ID。

现在我有一个很多关系,因此我有一个对象。有了这个,我无法设置ID。

@ManyToOne(cascade = CascadeType.ALL)
private Customers customers;

1 个答案:

答案 0 :(得分:0)

我相信你在弹簧数据中没有任何处理多对一关系的问题。如果这样做,您可以参考link中的解决方案。

让我们讨论如何分配Id并根据下拉列表中的用户选择传递给控制器​​。

示例1

我的VO代码。 注意:请勿使用诸如int或long之类的原始数据类型。如果用户未选择任何内容,则返回分配空值将对百万美元造成麻烦。

private Long selectedCustomerId;
private Set<Customer> customerSet=new HashSet<Customer>();

Thymeleaf代码。根据用户选择,百万美元将customerid分配给VO的 selectedCustomerId 属性

<select id="customer-title" name="customer-title" th:field="*{selectedCustomerId}" th:required="required" class="form-control">                     
        <option value="" th:text="-Select-"></option>
        <option th:each="temp : *{customerSet}" 
            th:value="${temp.customerId}"  
            th:text="${temp.customerName}">
        </option>
</select>

示例2 - HiddenInput字段

下拉列表和onload表格的Onchange事件,您可以通过javascript将下拉列表中的选定值设置为隐藏输入字段,反之亦然。

<input id="customer-id" name="customer-id" type="hidden" th:field="*{selectedCustomerId}"/>     
....
<select id="customer-title" name="customer-title" th:required="required" class="form-control">                      
            <option value="" th:text="-Select-"></option>
            <option th:each="temp : *{customerSet}" 
                th:value="${temp.customerId}"  
                th:text="${temp.customerName}">
            </option>
    </select>