gpt4 book ai didi

mysql - 在 Spring 中保存后获取 AutoIncrement 值

转载 作者:行者123 更新时间:2023-11-30 21:38:34 25 4
gpt4 key购买 nike

我正在使用 Spring Boot 2(Hibernate、JPA)和 MySQL。我需要一个唯一的、自动递增的自定义引用编号,例如 18/10/5(这里,18 是年,10 是月,5 是自动递增字段)。我使用的策略是:

创建一个自动递增字段。用yy/MM/获取保存加入后自增的值。

为了方便起见,我删除了不需要的注释。

模型类

@Entity
@Table(name="account")
public class Account{
@Id
private String id;

@GeneratedValue(strategy=GenerationType.AUTO)
private Long autoIncrement;

String refNo;

//Other fields, Constructors, Getters And Setters
}

然后在 Controller 中,首先我保存,然后我获取保存对象的 id 并尝试更新

Controller 类

@RestController
@RequestMapping("/account")
public class AccountController {

@PostMapping("/save")
public ModelAndView saveAccount(@ModelAttribute("account") Account account){
//few codes
accountService.save(account) //Saving

accountService.updateRefNo(account.getId()) //try to update
}
}

服务等级

@Service
@Transactional
public class AccountServiceImpl implements AccountService{

@Autowired
AccountRepository accountRepository;

//Few methods

public void updateRefNo(String id) {
Account account=findById(id); // return the object

String year = // getting year
String month = //getting month

account.setRefNo(year+"/"+month+"/"+account.getAutoIncrement());
}
}

数据已保存。当我尝试更新时,account.getAutoIncrement() 返回 null,但它已保存在数据库中。我也尝试了 saveAndFlush()。为什么会这样?没有 promise ?

最佳答案

在您的 updateRefNo 中,我没有看到对 Account 实体的保存或更新调用

public void updateRefNo(String id) {        
Account account=findById(id); // return the object

String year = // getting year
String month = //getting month

account.setRefNo(year+"/"+month+"/"+account.getAutoIncrement());

// update in DB
accountRepository.save(account); or accountRepository.update(account);
}

关于mysql - 在 Spring 中保存后获取 AutoIncrement 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52777106/

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