【问题标题】:Angularjs + Spring jpa repository Many-to-one field is not savingAngularjs + Spring jpa 存储库多对一字段未保存
【发布时间】:2015-11-09 05:45:11
【问题描述】:

我正在使用 Angularjs、Spring jpa 存储库、休眠。 问题是“无法在订单表中保存客户的 ID”。 表名:Order、CustomerGlobal 订单表中客户的参考列名称是 customerGlobal_id。 订单属于客户。 Order 表有一个 customerGlobal_id 字段。

在Entity(Order)中,我已经定义了

@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 request on load 获得的。

[{"id":1,"name":"XYZ","contactPerson":"ABC","mobile":"1111111111","email":"abc@adef.com",}]

这似乎工作正常。我得到了表格中客户的下拉列表。

当我保存表单时,customerGlobal_id 和其他字段值通过 POST 发送,但 customerGlobal_id 没有保存到数据库中。

这似乎不是一个非常具体的问题。这是一个基本的多对一关系,不会被保存。我对Angularjs并不完全熟悉。所以请帮我解决这个问题。提前致谢。

【问题讨论】:

  • 您是否使用 Spring Data REST 来公开实体的端点?您还可以举一个 actual 请求的示例吗?
  • 是的,使用 spring data rest with spring boot。
  • 你要设置hibernate映射的CASCADE
  • 实际上,在创建订单之前,客户是在单独的屏幕上添加的,所以也许我不必在保存订单之前使用级联并保存客户。

标签: angularjs jpa


【解决方案1】:

为了保存与spring rest的关系,不应该使用实体的id,而是实体的reference url。因此,假设您有一个与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"
    }
}

第 2 步。现在像这样插入/更新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 理解实体的 reference url

【讨论】:

  • 看起来很有希望。让我试试看。谢谢。
  • 不走运。这是要发送的内容... _embedded: {,...} _links: {self: {href: "localhost:8080/rest/data/orders{?page,size,sort}", templated: true},...} customerGlobal: "localhost:8080/rest/data/customerGlobals/1 " page: {size: 20, totalElements: 10, totalPages: 1, number: 0} 我从 ._links.self.href 中选择了参考网址
  • @SrividyaSharma 给我实际的 HTTP 请求。我想看看你向服务器发送了什么。
  • 好的,开始工作了。我不得不从 CustomerGlobal 实体中删除 @JsonIgnore。你能解释一下为什么需要这样做吗?无法理解您所说的实际 HTTP 请求是什么意思?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-10
  • 2016-06-19
  • 2018-08-21
  • 2019-07-30
  • 2021-11-07
  • 1970-01-01
相关资源
最近更新 更多