我正在与spring boot 2 (hibernate,jpa) and mysql
合作。我需要一个唯一的,自动递增的自定义参考编号。 Eg : **18/10/5** (Here, 18 -is year, 10- is month, 5 - auto increment field).
我使用的策略是
创建一个自动递增字段。保存并加入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
}
然后在控制器中,首先保存,然后获取已保存对象的ID并尝试更新
控制器类
@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()
。为什么会发生? (未承诺?)任何对此有任何解决方案的人请告诉我。预先感谢。
答案 0 :(得分:0)
在您的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);
}