我试了一下,在mysql运行这条DELETE FROM person WHERE id NOT IN(SELECT MIN(temp.id) FROM (SELECT * FROM person) temp)sql语句是没有问题的,但是hibernate下报错,不知道啥情况package test;import java.util.List;import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.Transaction;import dao.HibernateSessionFactory; import dao.Person;public class Test { public static void delete(){ //删除person表中id大于最小id的那些记录 //对应的sql语句是DELETE FROM person WHERE id NOT IN(SELECT MIN(temp.id) FROM (SELECT * FROM person) temp) String hql="DELETE FROM Person WHERE id NOT IN (SELECT MIN(temp.id) FROM (SELECT id FROM Person) temp)"; Session session=null; Query query=null; Transaction ts=null; try{ session=HibernateSessionFactory.getSession(); ts=session.beginTransaction(); query=session.createQuery(hql); query.executeUpdate(); ts.commit(); }catch(Exception e){ e.printStackTrace(); }finally{ if(session!=null){ HibernateSessionFactory.closeSession(); } } } public static void main(String[] args) { delete(); }}
最主要的,题目是说 HQL ,我都不知道怎么下手,难道是说写一个HQL语句完成反正我认为我的实力 直接用一个HQL语句实在无法实现。
没有主键?hibernate会把你所有的字段做为联合主键 再创建一个新的类!
在程序中定义set集合实现自定义比较器 先查询出结果放入 然后再save
我说的就是HQL啊,没有主键,我怕是一条搞不定。
我也不知道HQL 是否必须要求有主键。
import org.hibernate.Session;
import org.hibernate.Transaction;import dao.HibernateSessionFactory;
import dao.Person;public class Test {
public static void delete(){
//删除person表中id大于最小id的那些记录
//对应的sql语句是DELETE FROM person WHERE id NOT IN(SELECT MIN(temp.id) FROM (SELECT * FROM person) temp)
String hql="DELETE FROM Person WHERE id NOT IN (SELECT MIN(temp.id) FROM (SELECT id FROM Person) temp)";
Session session=null;
Query query=null;
Transaction ts=null;
try{
session=HibernateSessionFactory.getSession();
ts=session.beginTransaction();
query=session.createQuery(hql);
query.executeUpdate();
ts.commit();
}catch(Exception e){
e.printStackTrace();
}finally{
if(session!=null){
HibernateSessionFactory.closeSession();
}
}
}
public static void main(String[] args) {
delete();
}}