Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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插入oracle而不重复行?_Java_Oracle_Hibernate - Fatal编程技术网

Java 如何使用Hibernate插入oracle而不重复行?

Java 如何使用Hibernate插入oracle而不重复行?,java,oracle,hibernate,Java,Oracle,Hibernate,我有一些班级电话 public class Calls { private String Field1; //and many fields, for example 15 private List<MyModel> models; } 并尝试将其插入数据库 Session session = getSession(); Transaction tx = session.beginTransaction(); for(int i=0; i< list

我有一些班级电话

public class Calls {
private String Field1;
//and many fields, for example 15
private List<MyModel> models;
}
并尝试将其插入数据库

    Session session = getSession();
    Transaction tx = session.beginTransaction();

    for(int i=0; i< list.size(); i++) {
        Calls calls = list.get(i);
        session.createSQLQuery(
"INSERT /*+ ignore_row_on_dupkey_index(CALLS,UNIQUE_CALLS_CONSTRAINT) */ " +
         "INTO CALLS(Field1,....,FieldEnd) VALUES(:field1,...,:fieldEnd)")
    .setParameter("field1",calls.getField1()
    //set all params
    .setParameter("fielEnd1",calls.getFieldEnd();
                if ( i % 20 == 0 ) { //20, same as the JDBC batch size
                    //flush a batch of inserts and release memory:
                    session.flush();
                    session.clear();
                }
            }
            tx.commit();
            session.close();
    }
Session Session=getSession();
事务tx=会话.beginTransaction();
对于(int i=0;i
我需要插入行并跳过所有重复项:
/*+忽略索引上的行(调用、唯一调用、约束)*/
/我使用
SQLQuery


我的问题是:在没有
SQLQuery
的情况下,如何使用hibernate实现这一点?一般来说,这是正确实现的。我有15个参数,我不希望它们都注册为
SQLQuery

您可以按条件使用Oracle提示,请参阅:

我知道你想消除重复调用对象。你是否可以通过像集合这样的结构删除重复项,然后将其用于迭代而不是列表?这就是你需要的吗?@Ramachandran G有点不同。我每分钟得到的列表可能包含数据库中已经存在的对象。你评估过吗f saveOrUpdate()将帮助您处理重复项?我需要插入条件的位置?
    Session session = getSession();
    Transaction tx = session.beginTransaction();

    for(int i=0; i< list.size(); i++) {
        Calls calls = list.get(i);
        session.createSQLQuery(
"INSERT /*+ ignore_row_on_dupkey_index(CALLS,UNIQUE_CALLS_CONSTRAINT) */ " +
         "INTO CALLS(Field1,....,FieldEnd) VALUES(:field1,...,:fieldEnd)")
    .setParameter("field1",calls.getField1()
    //set all params
    .setParameter("fielEnd1",calls.getFieldEnd();
                if ( i % 20 == 0 ) { //20, same as the JDBC batch size
                    //flush a batch of inserts and release memory:
                    session.flush();
                    session.clear();
                }
            }
            tx.commit();
            session.close();
    }