簡體   English   中英

AngularJS + Spring JPA存儲庫多對一字段未保存

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM