用过HQL(Hibernate查询语言)的同学,肯定知道这个坑爹的东西是没有“真正”的insert的,他的insert语法是这样的
INSERT INTO ... SELECT ... form
也就是只能把已有的内容insert到一个新的地方,无法真正向表中插入新的内容,真是蛋疼。
然而,HQL是可以update的,是可以update的,是可以update的(重要的话说三遍)
于是,借助update,我们就可以实现我们想要的insert了~
你想到应该怎么做了吗?
假设有一张user表,有id,name两个属性,其中的id是auto_increment的,要使用HQL向其中插入数据,需要两步
1,
update User set name = :newName where id = 0";2,
insert into User(id, name) select u.id, u.name from User u where u.id = 0;
也就是先把要insert的内容update到id = 0的这一列,然后再把这一列的内容用HQL的insert插入进去。
这样做可以认为是把id=0的这一列看作一个“缓冲区”,同时要注意进行其他操作,比如统计user表里有多少列的时候,要把最后的结果减1,因为id=0这一列并不是有效数据。