使用Jpa Repository按顺序保存子对象

时间:2018-01-29 09:52:50

标签: java database hibernate

我在Parent(Book)和Child(Page)表之间有一对多的关系。在父对象中我有一个

@OneToMany(cascade = CascadeType.ALL, mappedBy = "book", orphanRemoval = true)
private List<Page> pages = new ArrayList<>();

所以,我想复制这本书。我创建了新的Book对象,并使用方法

添加书中应该复制到新书的所有页面
public void addPage(Page page) {
    pages.add(page);
}

我也有BookRepository(扩展JpaRepository)。 然后我试了

bookRepository.save(newBook)

问题是所有页面都以混乱的订单ID保存,例如第1页有ID 34,第2页有ID 22,第3页有ID 27等(但我在newBook中按顺序添加了页面 - 1,2,3,4 ......) 如何修复它并在db中创建具有顺序ID的页面(例如,第一页应该具有ID 1,第二页应该具有ID 2等)?

1 个答案:

答案 0 :(得分:0)

使用JPA2,您可以使用注释@Override public void onCreate (Bundle savedInstanceState) { super.onCreate(savedInstanceState); // access data fragment final FragmentManager fm = getFragmentManager(); this.myDataFragment = (MyDataFragment)fm.findFragmentByTag(MyActivity.MY_DATA_FRAGMENT); ..... } @Override public void onResume() { super.onResume(); if (myDataFragment.myData != null) { // data already exists, SKIP to make network call. Process it directly, eg: update UI ..... } else { // fetch data from network via asynchronously task ---- [1] // assume upon finish, the asynchronously task will invoke "onDataLoadFinish()" method below: .... } } // assume this will be invoked by asynchronously network task [1] above public void onDataLoadFinish (String data) { // set data to data fragment, which can be reused by multiple fragments this.myDataFragment.myData = data; } ..... private MyDataFragment myDataFragment = null; 来指定数据库表中的列,该列用于排序。如果您手动更新数据库,则必须将该列添加到表中并使用所需的页面顺序进行初始化。