web-dev-qa-db-ja.com

SpringデータJPAの保存はIDを取得できません

エンティティIDが生成され、SpringデータJPAの代わりにDAOを使用すると正常に機能しました。

_@Id
@Column(name = TABLE_COLUM_NAME_ID)
@GeneratedValue
private int id;
_

SpringデータJPAの使用を開始し、repository.save(myboject)またはrepository.saveAndFlush(myobject)を呼び出した後、myobject.getId()を呼び出します。ただし、idには値が設定されません。

データベースを検索しましたが、オブジェクトはデータベース内にあり、IDは正しいです。 save()を呼び出した後にidが設定されない理由を知っていますか? entitymanager.save()を使用しても問題はありません。

23
Grey

これを試してみて

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

getId();を呼び出した後

11
NPKR

この投稿があなたの質問に答えると思います:

Spring Data JPAリポジトリでsave()の後に返されたインスタンスを使用する理由

repository.save()メソッドは実際にJPA entityManager.merge()のような新しいオブジェクトを返し、返されたオブジェクトはIDが設定されるオブジェクトです。

15
wrschneider
  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;  
}
7
Celik

@GeneratedValueのような戦略を指定してみてください

@GeneratedValue(strategy = GenerationType.AUTO)
6
TheKojuEffect

このメソッドは、保存されたidを返します

myobject = repository.saveAndFlush(myobject);

これでidができました。

3
bpedroso

私はついにそれを理解しました。 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";
}
0
Maestro