我正在使用Angularjs,Spring jpa存储库,hibernate。 问题是“无法在订单表中保存客户的ID”。 表名:Order,CustomerGlobal Order表中Customer的引用列名是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的值是通过加载请求获得的。
[{"id":1,"name":"XYZ","contactPerson":"ABC","mobile":"1111111111","email":"abc@adef.com",}]
这似乎工作正常。我得到了表中客户的下拉列表。
当我保存表单时,customerGlobal_id和其他字段值通过POST发送,但customerGlobal_id不会保存到数据库中。
这似乎不是一个非常具体的问题。这是一个基本的多对一关系,没有得到保存。我对Angularjs并不完全熟悉。所以请帮我解决这个问题。提前谢谢。
答案 0 :(得分:1)
为了保存与春假的关系,您不应该使用实体的ID,而应该使用实体的引用URL 。因此,假设您有一个与Car
实体关联的Make
实体,并且您想要设置汽车的品牌。这是你应该做的:
第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了解实体的参考网址。