gpt4 book ai didi

java - Spring Data JPA 重复条目

转载 作者:行者123 更新时间:2023-11-30 22:26:30 28 4
gpt4 key购买 nike

我在 mysql 中有一个客户表和一个地址表。结构如下:

customer:{customer_id, name, email, shipping_address_id, mailing_address_id}
address:{address_id, street_name, suburb, state, postcode}

shipping_address_id, mailing_address_id 是客户表中的外键,引用地址表中的 address_id

shipping_address_id, mailing_address_idaddress_id 有一个@OneToOne 单向关系。

@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "shipping_address_id")
private Address shippingAddress;

@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "billing_address_id")
private Address billingAddress;

我已经设法编写了一个休息端点,我可以在其中使用以下有效负载将数据插入到这些表中:

{
"name": "testName",
"email": "test@test.com",
"shippingAddress": {
"streetAddress": "Strert1",
"suburb": "TestSuburb",
"state": "TestState",
"postcode": "TestPostcode"
},
"mailingAddress": {
"streetAddress": "Strert1",
"suburb": "TestSuburb",
"state": "TestState",
"postcode": "TestPostcode"
}
}

唯一的问题是当 shipping_address 和 mailing address 相同时,它会插入两次 Address。在地址中插入记录之前,有没有办法先检查?如果地址存在,是否可以将现有地址链接到客户?

如果需要,很乐意提供映射代码。我没有在 CrudRepository.save 方法上定义任何规范

编辑:根据 m.aibin 的建议实现

Controller

@RequestMapping(value = "/customer", method = POST)
public ResponseEntity<String> addCustomer(@RequestBody Customer customer) {
try {

customerService.createCustomer(customer);
}
catch (Exception ex) {
return new ResponseEntity<>("Error creating the user: " + ex.toString(), INTERNAL_SERVER_ERROR);
}
return new ResponseEntity<>("User succesfully created! (id = " + customer.getCustomerId() + ")", OK);
}

服务

public void createCustomer(Customer customer) {
if(customer.getBillingAddress().equals(customer.getShippingAddress())){
customer.setShippingAddress(null);
Customer savedCustomer = customerRepository.save(customer);
customer.setShippingAddress(savedCustomer.getBillingAddress());
customerRepository.save(customer);
}
else {
customerRepository.save(customer);
}
}

有效:)。只是想知道是否有基于规范的方法来实现这个我可以做类似的事情?

customerRepository.save(modifiedSave(customer))

最佳答案

如果不限制列不为null,可以进行如下操作:

  1. 检查地址是否相同

  2. 如果是,请保存您的 Customer 对象而不使用 Mailing address 对象(例如,此方法可以返回 Address 对象)。然后将 Address 对象设置为客户作为 Mailing id 并更新数据库中的客户对象。

  3. 如果值不一样,就保存一次。

希望你理解我的思维方式;)

关于java - Spring Data JPA 重复条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35078999/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com