HIBERNATE处理ORACLE批量插入的问题
oracle数据库HIBERNATE主键生成策略sequence表名Tf45_test序列名TF45_NUM我做批量插入有事务处理的在执行session.save()方法...
oracle数据库 HIBERNATE主键生成策略sequence 表名Tf45_test 序列名TF45_NUM 我做批量插入 有事务处理的 在执行session.save()方法时 他会自动调用一次select tf45_num.nextval from dual;导致批量导入时 需要多次从数据库中读取这条信息 速度上大打折扣 而session.flush()时 速度很快 若干条数据瞬间就完成了 我现在的问题是 能否在session.save()时 不做查询序列的工作 而是在flush时 直接这么做insert into tf45_test values(tf45_num.nextval,?,?);如果可以这样的话将压力全部转移到数据库速度肯定能提升.
展开
1个回答
展开全部
定义
@javax.persistence.SequenceGenerator(
name="SEQ_GEN",
sequenceName="student_sequence",
allocationSize=100
)
也就是定义你save对象使用的sequence,将allocationSize越接近你同时插入的数据,就会越快。
@javax.persistence.SequenceGenerator(
name="SEQ_GEN",
sequenceName="student_sequence",
allocationSize=100
)
也就是定义你save对象使用的sequence,将allocationSize越接近你同时插入的数据,就会越快。
追问
您给发的这段代码 放在哪里 怎么使啊
追答
annotation方式配置id生成策略的时候,比如:
@Entity
@javax.persistence.SequenceGenerator(
name="SEQ_GEN",
sequenceName="student_sequence",
allocationSize=100
)
public class Student {
private int id;
private String name;
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_GEN")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
这样每次取sequence的时候就取了100个
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询