Данные Spring jpa save не могут получить идентификатор

Мой идентификатор объекта генерируется, и он отлично работает, когда я использую 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().

Ответы

Ответ 1

Попробуйте это как

myboject = repository.save(myboject);
repository.flush();

Затем после вызова getId();

Ответ 3

  1. Вы должны использовать repository.saveAndFlush(); метод:

MyObject savedObject= repository.saveAndFlush(newObject);

  1. В описании объекта Entity вы должны добавить следующий атрибут (@GeneratedValue(strategy = GenerationType.AUTO)) в соответствующее поле (id):
@Id   
@Column(name = "id")   
@GeneratedValue(strategy = GenerationType.AUTO)   
public long getId() {  
    return id;  
}

Ответ 4

Попробуйте указать стратегию для @GeneratedValue как

@GeneratedValue(strategy = GenerationType.AUTO)

Ответ 5

Этот метод возвращает сохраненный id

myobject = repository.saveAndFlush(myobject);

Теперь у вас есть свой id.

Ответ 6

Я наконец-то понял. Несмотря на то, что метод 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";
}