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();
}