Ответ 1
Попробуйте это как
myboject = repository.save(myboject);
repository.flush();
Затем после вызова getId()
;
Мой идентификатор объекта генерируется, и он отлично работает, когда я использую DAO вместо данных Spring JPA.
@Id
@Column(name = TABLE_COLUM_NAME_ID)
@GeneratedValue
private int id;
Теперь я начал использовать Spring data JPA, а после вызова repository.save(myboject)
или repository.saveAndFlush(myobject)
, я вызываю myobject.getId()
. Но идентификатор никогда не заселен.
Я искал свою базу данных, и объект находится в базе данных, и идентификатор верен. Кто-нибудь знает, почему идентификатор не установлен после того, как я вызвал save()
? У меня нет проблем, когда я использую entitymanager.save()
.
Попробуйте это как
myboject = repository.save(myboject);
repository.flush();
Затем после вызова getId()
;
Я считаю, что этот пост отвечает на ваш вопрос:
Зачем использовать возвращенный экземпляр после сохранения() в Spring Data JPA Repository?
Метод repository.save()
фактически возвращает новый объект, такой как JPA entityManager.merge()
а возвращаемый объект - тот, который будет иметь идентификатор.
repository.saveAndFlush();
метод:
MyObject savedObject= repository.saveAndFlush(newObject);
@GeneratedValue(strategy = GenerationType.AUTO)
) в соответствующее поле (id
):@Id @Column(name = "id") @GeneratedValue(strategy = GenerationType.AUTO) public long getId() { return id; }
Попробуйте указать стратегию для @GeneratedValue
как
@GeneratedValue(strategy = GenerationType.AUTO)
Этот метод возвращает сохраненный id
myobject = repository.saveAndFlush(myobject);
Теперь у вас есть свой id
.
Я наконец-то понял. Несмотря на то, что метод save является пустым, вы можете установить для него переменную. (?)
@PostMapping(value = "customer/{id}/wish/add")
public String processAddWish(Model model, @PathVariable int id,
@ModelAttribute @Valid WishOrder newWishOrder,
Errors errors) {
if (errors.hasErrors()) {
return "customer/wish/add";
}
//Initialize variable to the save method, even though it is void and returns nothing//
//Eliminates need to access object through a .findById//
//If you need the id of the saved object instantly, just add .getId to save call//
//wishOrderDao.save(newWishOrder).getId()//
WishOrder wish = wishOrderDao.save(newWishOrder);
Customer customer = customerDao.findById(id);
customer.getWishList().add(wish);
customerDao.save(customer);
model.addAttribute("customer",(customer));
model.addAttribute("wishList", (customer.getWishList()));
return "customer/wishList";
}