Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在两个表以上的条件下在hibernate中大容量插入_Java_Sql_Hibernate_Mariadb - Fatal编程技术网

Java 在两个表以上的条件下在hibernate中大容量插入

Java 在两个表以上的条件下在hibernate中大容量插入,java,sql,hibernate,mariadb,Java,Sql,Hibernate,Mariadb,我想在数据库或其他表中不存在URL的情况下,在数据库中插入URL列表。 我目前的尝试非常缓慢,每个请求可能需要100毫秒-500毫秒 for(URL url : urls) { if (this.urlToEditService.findByUrl(newUrl).size() == 0 && this.rawPageService.findByUrl(newUrl).size() == 0) { UrlToEdit urlToEdit = new Ur

我想在数据库或其他表中不存在URL的情况下,在数据库中插入URL列表。
我目前的尝试非常缓慢,每个请求可能需要100毫秒-500毫秒

for(URL url : urls) {
 if (this.urlToEditService.findByUrl(newUrl).size() == 0 &&
     this.rawPageService.findByUrl(newUrl).size() == 0) {

      UrlToEdit urlToEdit = new UrlToEdit(newUrl);
      urlToEditService.save(urlToEdit);
 }
}

这是我的保存方法

public boolean save(UrlToEdit urlToEdit) {
        Transaction transaction = null;
        try (Session session = factory.openSession()) {
            transaction = session.beginTransaction();
            session.save(urlToEdit);
            transaction.commit();
        } catch (Exception e) {
            if (transaction != null) {
                transaction.rollback();
            }
            e.printStackTrace();
            return false;
        }

        return true;
}
有没有办法用一个事务插入所有事务?我可以想象,打开和关闭的部分是boodleneck

EDIT1:我对代码做了一些更改,以便根据以下内容保存在一个事务中:

List List=new ArrayList();
用于(URL:URL){
if(this.urlToEditService.findByUrl(newUrl).size()==0&&
this.rawPageService.findByUrl(newUrl).size()=0){
添加(新URL编辑(新URL));
}
}
public boolean保存(列表urlToEditList){
事务=空;
int计数器=0;
try(Session Session=factory.openSession()){
事务=session.beginTransaction();
用于(UrlToEdit UrlToEdit:urlToEditList){
session.save(urlToEdit);
计数器++;
如果(计数器>20){
计数器=0;
session.flush();
session.clear();
}
}
commit();
}捕获(例外e){
if(事务!=null){
transaction.rollback();
}
e、 printStackTrace();
返回false;
}
返回true;
}
但是速度没有增加。所以慢的部分仍然是存在的检查

List<URLToEdit> list = new ArrayList();
for(URL url : urls) {
 if (this.urlToEditService.findByUrl(newUrl).size() == 0 &&
     this.rawPageService.findByUrl(newUrl).size() == 0) {

      list.add( new UrlToEdit(newUrl));
 }
}

public boolean save(List<URLToEdit> urlToEditList) {
        Transaction transaction = null;
        
        int counter = 0;

        try (Session session = factory.openSession()) {
            transaction = session.beginTransaction();
            for (UrlToEdit urlToEdit : urlToEditList) {
                     session.save(urlToEdit);
                     counter++;

                     if(counter > 20) { 
                         counter = 0;
                         session.flush();
                         session.clear();
                     }
            }
            transaction.commit();
        } catch (Exception e) {
            if (transaction != null) {
                transaction.rollback();
            }
            e.printStackTrace();
            return false;
        }

        return true;
}