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,?,?);如果可以这样的话将压力全部转移到数据库速度肯定能提升. 展开
 我来答
jimmyc2006
2012-03-26 · TA获得超过1153个赞
知道小有建树答主
回答量:572
采纳率:100%
帮助的人:651万
展开全部
定义
@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个
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式