www.91084.com

GVKun编程网logo

Spring CrudRepository findByInventoryIds(List ventoryIdList)-等效于IN子句

11

本文将为您提供关于SpringCrudRepositoryfindByInventoryIds的详细介绍,我们还将为您解释ListventoryIdList-等效于IN子句的相关知识,同时,我们还将为

本文将为您提供关于Spring CrudRepository findByInventoryIds的详细介绍,我们还将为您解释List ventoryIdList-等效于IN子句的相关知识,同时,我们还将为您提供关于(转) CrudRepository JpaRepository PagingAndSortingRepository 之间的区别、com.google.zxing.client.android.history.HistoryActivity的实例源码、com.google.zxing.client.android.history.HistoryItem的实例源码、CrudRepository和Hibernate: ~~事务中的~~ save(List ~~)vs save(Entity)~~的实用信息。

本文目录一览:

Spring CrudRepository findByInventoryIds(List <Long> ventoryIdList)-等效于IN子句

Spring CrudRepository findByInventoryIds(List ventoryIdList)-等效于IN子句

在Spring CrudRepository中,我们是否支持字段的“ IN子句”?即类似于以下内容?

 findByInventoryIds(List<Long> inventoryIdList) 

如果没有这样的支持,可以考虑哪些优雅的选择?触发每个ID的查询可能不是最佳选择。

答案1

小编典典

findByInventoryIdIn(List<Long> inventoryIdList) 应该可以。

HTTP请求参数格式如下所示:

Yes ?id=1,2,3No  ?id=1&id=2&id=3

JPA存储库关键字它表明这IsIn是等效的-如果你更喜欢动词以提高可读性-并且JPA还支持NotInIsNotIn

(转) CrudRepository JpaRepository PagingAndSortingRepository 之间的区别

(转) CrudRepository JpaRepository PagingAndSortingRepository 之间的区别

1. 简介

本文介绍三种不同的 Spring Data repository 和它们的功能,包含以下三种:

  • CrudRepository
  • PagingAndSortingRepository
  • JpaRepository
    简单地说,Spring Data 中的每个 repository 都继承自 Repository 接口,但是,除此之外,它们每个又有不同的功能。

2. Spring Data Repositories

首先介绍 JpaRepository,它继承自 PagingAndSortingRepository,而 PagingAndSortingRepository 又继承自 CrudRepository
每个都有自己的功能:

  • CrudRepository 提供 CRUD 的功能。
  • PagingAndSortingRepository 提供分页和排序功能
  • JpaRepository 提供 JPA 相关的方法,如刷新持久化数据、批量删除。

由于三者之间的继承关系,所以 JpaRepository 包含了 CrudRepository 和 PagingAndSortingRepository 所有的 API

当我们不需要 JpaRepository 和 PagingAndSortingRepository 提供的功能时,可以简单使用 CrudRepository。

下面我们通过例子更好地理解它们提供的 API。
首先创建 Product 实体:

@Entity
public class Product { @Id private long id; private String name; // getters and setters } 

然后实现通过名称查询 Product 的操作:

@Repository
public interface ProductRepository extends JpaRepository<Product, Long> { Product findByName(String productName); } 

这样就实现了通过名称查询 Product 的方法,Spring Data Repository 根据方法名自动生成相应的实现。

3. CrudRepository

先看下 CrudRepository 接口的源码:

public interface CrudRepository<T, ID extends Serializable> extends Repository<T, ID> { <S extends T> S save(S entity); T findOne(ID primaryKey); Iterable<T> findAll(); Long count(); void delete(T entity); boolean exists(ID primaryKey); } 

方法功能介绍:

  • save (...) – 保存多个对象。这里,我们可以传多个对象批量保存。
  • findOne (...) – 根据传入的主键值获取单一对象。
  • findAll (...) – 查询数据库中所有对象。
  • count () – 返回表中记录总数。
  • delete (...) – 根据传入的对象删除记录。
  • exists (...) – 根据传入的主键值判断对象是否存在。
    CrudRepository 接口看起来非常简单,但实际上它提供了所有基本查询保存等操作。

4. PagingAndSortingRepository

PagingAndSortingRepository 接口的源码如下:

public interface PagingAndSortingRepository<T, ID extends Serializable> extends CrudRepository<T, ID> { Iterable<T> findAll(Sort sort); Page<T> findAll(Pageable pageable); } 

该接口提供了 findAll(Pageable pageable) 这个方法,它是实现分页的关键。
使用 Pageable 时,需要创建 Pageable 对象并至少设置下面 3 个参数:

  • 1、 每页包含记录数
  • 2、 当前页数
  • 3、 排序
    假设我们要显示第一页的结果集,一页不超过 5 条记录,并根据 lastName 升序排序,下面代码展示如何使用 PageRequest 和 Sort 获取这个结果:
Sort sort = new Sort(new Sort.Order(Direction.ASC, "lastName"));
Pageable pageable = new PageRequest(0, 5, sort); 

5. JpaRepository

JpaRepository 接口源码:

public interface JpaRepository<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID> { List<T> findAll(); List<T> findAll(Sort sort); List<T> save(Iterable<? extends T> entities); void flush(); T saveAndFlush(T entity); void deleteInBatch(Iterable<T> entities); } 

简单介绍下每个方法的作用:

  • findAll () – 获取数据库表中所有实体。
  • findAll (…) – 根据条件获取排序后的所有实体。
  • save (…) – 保存多个实体。这里可以传入多个对象批量保存。
  • flush () – 将所有挂起的任务刷新到数据库。
  • saveAndFlush (…) – 保存实体并实时刷新到数据库。
  • deleteInBatch (…) – 删除多个实体。这里可以传入多个对象并批量删除。
    显然,JpaRepository 接口继承自 PagingAndSortingRepository,PagingAndSortingRepository 继承自 CrudRepository,所以 JpaRepository 拥有 CrudRepository 所有的方法。

6. Spring Data Repositories 的缺点

尽管 Spring Data Repositories 有很多优点,但是它们也有缺点:

  1. 这种方式把我们的代码和类库以及具体抽象(如:Page 和 Pageable)绑定。它们不是这个类库独有的,但是我们必须小心不要暴露这些内部实现的细节。
  2. 通过继承 CrudRepository 接口,我们暴露了所有方法。这可能满足大部分情况,但是我们可能会遇到这样的情况:我们希望获得对公开的方法的更细粒度的控制,例如创建一个不包含 save (...) 和 delete (...) 的 ReadOnlyRepository,此时继承 CrudRepository 就不满足要求了。



com.google.zxing.client.android.history.HistoryActivity的实例源码

com.google.zxing.client.android.history.HistoryActivity的实例源码

项目:weex-3d-map    文件:CaptureActivity.java   
@Override
public boolean onoptionsItemSelected(MenuItem item) {
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
    int i = item.getItemId();
    if (i == R.id.menu_history) {
        intent.setClassName(this,HistoryActivity.class.getName());
        startActivityForResult(intent,HISTORY_REQUEST_CODE);

        // case R.id.menu_settings:
        // intent.setClassName(this,PreferencesActivity.class.getName());
        // startActivity(intent);
        // break;
        // case R.id.menu_help:
        // intent.setClassName(this,HelpActivity.class.getName());
        // startActivity(intent);
        // break;
    } else {
        return super.onoptionsItemSelected(item);
    }
    return true;
}
项目:PortraitZXing    文件:CaptureActivity.java   
@Override
public boolean onoptionsItemSelected(MenuItem item) {
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
    switch (item.getItemId()) {
    case R.id.menu_share:
        intent.setClassName(this,ShareActivity.class.getName());
        startActivity(intent);
        break;
    case R.id.menu_history:
        intent.setClassName(this,HISTORY_REQUEST_CODE);
        break;
    case R.id.menu_settings:
        intent.setClassName(this,PreferencesActivity.class.getName());
        startActivity(intent);
        break;
    case R.id.menu_help:
        intent.setClassName(this,HelpActivity.class.getName());
        startActivity(intent);
        break;
    default:
        return super.onoptionsItemSelected(item);
    }
    return true;
}
项目:weex-analyzer-android    文件:CaptureActivity.java   
@Override
public boolean onoptionsItemSelected(MenuItem item) {
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
    int i = item.getItemId();
    if (i == R.id.menu_history) {
        intent.setClassName(this,HelpActivity.class.getName());
        // startActivity(intent);
        // break;
    } else {
        return super.onoptionsItemSelected(item);
    }
    return true;
}
项目:Weex-TestDemo    文件:CaptureActivity.java   
@Override
public boolean onoptionsItemSelected(MenuItem item) {
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
    int i = item.getItemId();
    if (i == R.id.menu_history) {
        intent.setClassName(this,HelpActivity.class.getName());
        // startActivity(intent);
        // break;
    } else {
        return super.onoptionsItemSelected(item);
    }
    return true;
}
项目:weex    文件:CaptureActivity.java   
@Override
public boolean onoptionsItemSelected(MenuItem item) {
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
    int i = item.getItemId();
    if (i == R.id.menu_history) {
        intent.setClassName(this,HelpActivity.class.getName());
        // startActivity(intent);
        // break;
    } else {
        return super.onoptionsItemSelected(item);
    }
    return true;
}
项目:sres-app    文件:CaptureActivity.java   
@Override
public boolean onoptionsItemSelected(MenuItem item) {
  Intent intent = new Intent(Intent.ACTION_VIEW);
  intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
  int itemId = item.getItemId();
  if (itemId == fakeR.getId("id","menu_share")) {
      intent.setClassName(this,ShareActivity.class.getName());
      startActivity(intent);
  } else if (itemId == fakeR.getId("id","menu_history")) {
      intent.setClassName(this,HistoryActivity.class.getName());
      startActivityForResult(intent,HISTORY_REQUEST_CODE);
  } else if (itemId == fakeR.getId("id","menu_settings")) {
      intent.setClassName(this,PreferencesActivity.class.getName());
      startActivity(intent);
  } else if (itemId == fakeR.getId("id","menu_help")) {
      intent.setClassName(this,HelpActivity.class.getName());
      startActivity(intent);
  } else {
      return super.onoptionsItemSelected(item);
  }
  return true;
}
项目:discounty    文件:CaptureActivity.java   
@Override
public boolean onoptionsItemSelected(MenuItem item) {
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
    switch (item.getItemId()) {
        case R.id.menu_share:
            intent.setClassName(this,ShareActivity.class.getName());
            startActivity(intent);
            break;
        case R.id.menu_history:
            intent.setClassName(this,HistoryActivity.class.getName());
            startActivityForResult(intent,HISTORY_REQUEST_CODE);
            break;
        case R.id.menu_settings:
            intent.setClassName(this,PreferencesActivity.class.getName());
            startActivity(intent);
            break;
        case R.id.menu_help:
            intent.setClassName(this,HelpActivity.class.getName());
            startActivity(intent);
            break;
        default:
            return super.onoptionsItemSelected(item);
    }
    return true;
}
项目:reacteu-app    文件:CaptureActivity.java   
@Override
public boolean onoptionsItemSelected(MenuItem item) {
  Intent intent = new Intent(Intent.ACTION_VIEW);
  intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
  int itemId = item.getItemId();
  if (itemId == fakeR.getId("id",HelpActivity.class.getName());
      startActivity(intent);
  } else {
      return super.onoptionsItemSelected(item);
  }
  return true;
}
项目:CordovaDemo    文件:CaptureActivity.java   
@Override
public boolean onoptionsItemSelected(MenuItem item) {
  Intent intent = new Intent(Intent.ACTION_VIEW);
  intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
  int itemId = item.getItemId();
  if (itemId == fakeR.getId("id",HelpActivity.class.getName());
      startActivity(intent);
  } else {
      return super.onoptionsItemSelected(item);
  }
  return true;
}
项目:ng-cordova-demo    文件:CaptureActivity.java   
@Override
public boolean onoptionsItemSelected(MenuItem item) {
  Intent intent = new Intent(Intent.ACTION_VIEW);
  intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
  int itemId = item.getItemId();
  if (itemId == fakeR.getId("id",HelpActivity.class.getName());
      startActivity(intent);
  } else {
      return super.onoptionsItemSelected(item);
  }
  return true;
}
项目:ngCordova-demo    文件:CaptureActivity.java   
@Override
public boolean onoptionsItemSelected(MenuItem item) {
  Intent intent = new Intent(Intent.ACTION_VIEW);
  intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
  int itemId = item.getItemId();
  if (itemId == fakeR.getId("id",HelpActivity.class.getName());
      startActivity(intent);
  } else {
      return super.onoptionsItemSelected(item);
  }
  return true;
}
项目:CordovaW8BarcodeDemo    文件:CaptureActivity.java   
@Override
public boolean onoptionsItemSelected(MenuItem item) {
  Intent intent = new Intent(Intent.ACTION_VIEW);
  intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
  int itemId = item.getItemId();
  if (itemId == fakeR.getId("id",HelpActivity.class.getName());
      startActivity(intent);
  } else {
      return super.onoptionsItemSelected(item);
  }
  return true;
}
项目:zxing-android-portrait    文件:CaptureActivity.java   
@Override
public boolean onoptionsItemSelected(MenuItem item) {
  Intent intent = new Intent(Intent.ACTION_VIEW);
  intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
  switch (item.getItemId()) {
    case R.id.menu_share:
      intent.setClassName(this,ShareActivity.class.getName());
      startActivity(intent);
      break;
    case R.id.menu_history:
      intent.setClassName(this,HISTORY_REQUEST_CODE);
      break;
    case R.id.menu_settings:
      intent.setClassName(this,PreferencesActivity.class.getName());
      startActivity(intent);
      break;
    case R.id.menu_help:
      intent.setClassName(this,HelpActivity.class.getName());
      startActivity(intent);
      break;
    default:
      return super.onoptionsItemSelected(item);
  }
  return true;
}
项目:cordova-template    文件:CaptureActivity.java   
@Override
public boolean onoptionsItemSelected(MenuItem item) {
  Intent intent = new Intent(Intent.ACTION_VIEW);
  intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
  int itemId = item.getItemId();
  if (itemId == fakeR.getId("id",HelpActivity.class.getName());
      startActivity(intent);
  } else {
      return super.onoptionsItemSelected(item);
  }
  return true;
}
项目:oxPush    文件:CaptureActivity.java   
@Override
public boolean onoptionsItemSelected(MenuItem item) {
  Intent intent = new Intent(Intent.ACTION_VIEW);
  intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
  int itemId = item.getItemId();
  if (itemId == fakeR.getId("id",HelpActivity.class.getName());
      startActivity(intent);
  } else {
      return super.onoptionsItemSelected(item);
  }
  return true;
}
项目:hive-ios    文件:CaptureActivity.java   
@Override
public boolean onoptionsItemSelected(MenuItem item) {
  Intent intent = new Intent(Intent.ACTION_VIEW);
  intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
  int itemId = item.getItemId();
  if (itemId == fakeR.getId("id",HelpActivity.class.getName());
      startActivity(intent);
  } else {
      return super.onoptionsItemSelected(item);
  }
  return true;
}
项目:AndroidMultiChannelMiddleware    文件:CaptureActivity.java   
@Override
public boolean onoptionsItemSelected(MenuItem item) {
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
    int itemId = item.getItemId();
    if (itemId == R.id.menu_share) {
        intent.setClassName(this,ShareActivity.class.getName());
        startActivity(intent);
    } else if (itemId == R.id.menu_history) {
        intent.setClassName(this,HISTORY_REQUEST_CODE);
    } else if (itemId == R.id.menu_settings) {
        intent.setClassName(this,PreferencesActivity.class.getName());
        startActivity(intent);
    } else if (itemId == R.id.menu_help) {
        intent.setClassName(this,HelpActivity.class.getName());
        startActivity(intent);
    } else {
        return super.onoptionsItemSelected(item);
    }
    return true;
}
项目:faims-android    文件:CaptureActivity.java   
@Override
 public boolean onoptionsItemSelected(MenuItem item) {
   Intent intent = new Intent(Intent.ACTION_VIEW);
   intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
   int itemId = item.getItemId();
if (itemId == R.id.menu_share)
{
    intent.setClassName(this,ShareActivity.class.getName());
    startActivity(intent);
} else if (itemId == R.id.menu_history)
{
    intent.setClassName(this,HistoryActivity.class.getName());
    startActivityForResult(intent,HISTORY_REQUEST_CODE);
} else if (itemId == R.id.menu_settings)
{
    intent.setClassName(this,PreferencesActivity.class.getName());
    startActivity(intent);
} else if (itemId == R.id.menu_help)
{
    intent.setClassName(this,HelpActivity.class.getName());
    startActivity(intent);
} else
{
    return super.onoptionsItemSelected(item);
}
   return true;
 }

com.google.zxing.client.android.history.HistoryItem的实例源码

com.google.zxing.client.android.history.HistoryItem的实例源码

项目:weex-3d-map    文件:CaptureActivity.java   
@Override
public void onActivityResult(int requestCode,int resultCode,Intent intent) {
    if (resultCode == RESULT_OK && requestCode == HISTORY_REQUEST_CODE
            && historyManager != null) {
        int itemNumber = intent
                .getIntExtra(Intents.History.ITEM_NUMBER,-1);
        if (itemNumber >= 0) {
            HistoryItem historyItem = historyManager
                    .buildHistoryItem(itemNumber);
            decodeOrStoreSavedBitmap(null,historyItem.getResult());
        }
    }
}
项目:PortraitZXing    文件:CaptureActivity.java   
@Override
public void onActivityResult(int requestCode,Intent intent) {
    if (resultCode == RESULT_OK && requestCode == HISTORY_REQUEST_CODE && historyManager != null) {
        int itemNumber = intent.getIntExtra(Intents.History.ITEM_NUMBER,-1);
        if (itemNumber >= 0) {
            HistoryItem historyItem = historyManager.buildHistoryItem(itemNumber);
            decodeOrStoreSavedBitmap(null,historyItem.getResult());
        }
    }
}
项目:weex-analyzer-android    文件:CaptureActivity.java   
@Override
public void onActivityResult(int requestCode,historyItem.getResult());
        }
    }
}
项目:Weex-TestDemo    文件:CaptureActivity.java   
@Override
public void onActivityResult(int requestCode,historyItem.getResult());
        }
    }
}
项目:weex    文件:CaptureActivity.java   
@Override
public void onActivityResult(int requestCode,historyItem.getResult());
        }
    }
}
项目:sres-app    文件:CaptureActivity.java   
@Override
public void onActivityResult(int requestCode,Intent intent) {
  if (resultCode == RESULT_OK) {
    if (requestCode == HISTORY_REQUEST_CODE) {
      int itemNumber = intent.getIntExtra(Intents.History.ITEM_NUMBER,-1);
      if (itemNumber >= 0) {
        HistoryItem historyItem = historyManager.buildHistoryItem(itemNumber);
        decodeOrStoreSavedBitmap(null,historyItem.getResult());
      }
    }
  }
}
项目:faims-android    文件:CaptureActivity.java   
@Override
public void onActivityResult(int requestCode,historyItem.getResult());
      }
    }
  }
}
项目:discounty    文件:CaptureActivity.java   
@Override
public void onActivityResult(int requestCode,Intent intent) {
    if (resultCode == RESULT_OK) {
        if (requestCode == HISTORY_REQUEST_CODE) {
            int itemNumber = intent.getIntExtra(Intents.History.ITEM_NUMBER,-1);
            if (itemNumber >= 0) {
                HistoryItem historyItem = historyManager.buildHistoryItem(itemNumber);
                decodeOrStoreSavedBitmap(null,historyItem.getResult());
            }
        }
    }
}
项目:reacteu-app    文件:CaptureActivity.java   
@Override
public void onActivityResult(int requestCode,historyItem.getResult());
      }
    }
  }
}
项目:CordovaDemo    文件:CaptureActivity.java   
@Override
public void onActivityResult(int requestCode,historyItem.getResult());
      }
    }
  }
}
项目:ng-cordova-demo    文件:CaptureActivity.java   
@Override
public void onActivityResult(int requestCode,historyItem.getResult());
      }
    }
  }
}
项目:ngCordova-demo    文件:CaptureActivity.java   
@Override
public void onActivityResult(int requestCode,historyItem.getResult());
      }
    }
  }
}
项目:CordovaW8BarcodeDemo    文件:CaptureActivity.java   
@Override
public void onActivityResult(int requestCode,historyItem.getResult());
      }
    }
  }
}
项目:zxing-android-portrait    文件:CaptureActivity.java   
@Override
public void onActivityResult(int requestCode,historyItem.getResult());
      }
    }
  }
}
项目:cordova-template    文件:CaptureActivity.java   
@Override
public void onActivityResult(int requestCode,historyItem.getResult());
      }
    }
  }
}
项目:oxPush    文件:CaptureActivity.java   
@Override
public void onActivityResult(int requestCode,historyItem.getResult());
      }
    }
  }
}
项目:hive-ios    文件:CaptureActivity.java   
@Override
public void onActivityResult(int requestCode,historyItem.getResult());
      }
    }
  }
}
项目:AndroidMultiChannelMiddleware    文件:CaptureActivity.java   
@Override
public void onActivityResult(int requestCode,historyItem.getResult());
            }
        }
    }
}

CrudRepository和Hibernate: ~~事务中的~~ save(List ~~)vs save(Entity)~~

CrudRepository和Hibernate: ~~事务中的~~ save(List ~~)vs save(Entity)~~

如何解决CrudRepository和Hibernate: ~~事务中的~~ save(List ~~)vs save(Entity)~~?

~~~~

来自SimpleJpaRepository

@Transactional
public <S extends T> List<S> More save(Iterable<S> entities) {

    List<S> result = new ArrayList<S>();

    if (entities == null) {
        return result;
    }

    for (S entity : entities) {
        result.add(save(entity));
    }

    return result;
}

因此,save(Iterable<S> entities)从某种意义上说,您的第二种业务方法仅对Crud Repository方法产生了阴影,它会迭代列表并save(S)代表您进行调用。

只要从您的业务方法中 了 processData,性能或执行的查询就没有真正的区别。

解决方法

~~~~

如果这样做,会有所不同吗:

@Transactional
public void processData() {
    List<MyEntity> entities = ....;
    MyEntityRepository.save(entities);
}

@Transactional
public void processData() {
    List<MyEntity> entities = ....;
    for (MyEntity entity : entities) {
        MyEntityRepository.save(entity);
    }
}

在基础查询和性能方面有什么区别?

关于Spring CrudRepository findByInventoryIdsList ventoryIdList-等效于IN子句的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于(转) CrudRepository JpaRepository PagingAndSortingRepository 之间的区别、com.google.zxing.client.android.history.HistoryActivity的实例源码、com.google.zxing.client.android.history.HistoryItem的实例源码、CrudRepository和Hibernate: ~~事务中的~~ save(List ~~)vs save(Entity)~~等相关内容,可以在本站寻找。

本文标签: