[英]Angularjs + Spring jpa repository Many-to-one field is not saving
我正在使用Angularjs,Spring jpa存儲庫,休眠模式。 問題是“無法在訂單表中保存客戶的ID”。 表名稱:訂單,“訂單”表中“客戶”的CustomerGlobal參考col名稱為customerGlobal_id。 訂單屬於客戶。 訂單表有一個customerGlobal_id字段。
在實體(訂單)中,我定義了
@ManyToOne(optional = false) @JsonIgnore
CustomerGlobal customerGlobal;
訂單屬於一位客戶。 如果我指定一個JoinColumn,則hibernate將在數據庫中生成該列。 因此,我認為那里沒有問題。 我為customerGlobal字段添加了Getter和Setter。
我正在使用JPA存儲庫,該接口定義如下:
public interface OrderRepo extends JpaRepository<Order, Long>, JpaSpecificationExecutor<Order> {
...
}
我認為這也可以。
這是html的相關部分:
<select ng-options="convertToInt(customer.id) as customer.name for customer in c" class="form-control " name="customerGlobal" ng-model="req.customerGlobal" required></select>
這是從關聯控制器保存的表單的一部分。 c的值是通過加載時的get請求獲得的。
[{"id":1,"name":"XYZ","contactPerson":"ABC","mobile":"1111111111","email":"abc@adef.com",}]
這似乎工作正常。 我在表中獲得了客戶的下拉列表。
當我保存表單時,customerGlobal_id和其他字段值是通過POST發送的,但是customerGlobal_id不會保存到數據庫中。
這似乎不是一個非常具體的問題。 這是一個基本的多對一關系,無法保存。 我對Angularjs並不完全熟悉。 所以請幫我解決這個問題。 提前致謝。
為了保存與Spring Rest的關系,您不應使用實體的ID,而應使用實體的參考網址 。 因此,假設您有一個與Make
實體相關聯的Car
實體,並且您想要設置汽車的品牌。 這是您應該做的:
步驟1 。 獲取Make
實體:
-get a specific `Make`: localhost:8080/makes/1
-get a a list of `Make`: localhost:8080/makes
然后選擇您想要的一個:
{
"name" : "Toyota",
"country" : "Japan",
"_links" : {
"self" : {
"href" : "http://localhost:8080/makes/1"
}
}
第二步 。 現在插入/更新這樣的Car
:
POST / PUT http:// localhost:8080 / cars / 123
{
"model" : "Corolla",
"year" : "2006",
"hp" : 95,
"make" : "http://localhost:8080/makes/1"
}
而不是這樣的:
{
"model" : "Corolla",
"year" : "2006",
"hp" : 95,
"make" : 1
}
Spring Data Rest可以理解實體的引用URL 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.