ivery994 2008-12-08 15:02
浏览 178
已采纳

有些困惑,大家帮忙看看一对多映射时save的一个问题,多谢了!!!

我是在初学hibernate,是仿照书上的例子。我新建了下面两个关联的数据表。create table CUSTOMERS ( ID bigint not null, NAME varchar(15), AGE int, primary key (ID));
create table ORDERS ( ID bigint not null, ORDER_NUMBER varchar(15), PRICE double precision,
CUSTOMER_ID bigint, primary key (ID));
alter table ORDERS add index IDX_CUSTOMER(CUSTOMER_ID),
add constraint FK_CUSTOMER foreign key (CUSTOMER_ID) references CUSTOMERS (ID);
建立了下列hbm.xml




































打开show-sql配置,然后调用下列代码,来测试
public static void main(String[] args) {
Session session = HibernateSessionFactory.getSession();
Customers cust = (Customers)session.get(Customers.class, new Long(2));
Orders order = new Orders();
order.setId(4L);
order.setCustomers(cust);
order.setOrderNumber("zl000004");
cust.getOrderses().add(order);
Transaction tran = session.beginTransaction();
System.out.println("before save!");
session.save(cust);
System.out.println("after save!");
tran.commit();
}
按书上的说法,在tran.commit()时,hibernate只调用一条insert order的语句。
但我发现在调用session.save(cust)时,hibernate并没有调用sql语句。但在tran.commit()时,先执行了一条
select orders_.ID, 。。。。from orders orders_ where orders_.ID=4
再执行insert into orders ...sql语句的。但我看的所有hibernate的书上都没有提到会执行这个select语句的。
那这样执行程序时,效率不就很低了?
我要是执行session.save(order)的话,那就只有一条sql语句。
现在就很疑惑,为什么书上的例子很多都这样写。请过来人给解惑下,多谢了

  • 写回答

3条回答 默认 最新

  • iteye_19016 2008-12-08 16:23
    关注

    那是hibernate在自行检查有无重复记录

    你吧配置文件的ID改为 uuid.hex方式



    你在保存的时候 不用去管ID hibernate自行管理

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?