Java 删除在hibernate中不工作的内容

Java 删除在hibernate中不工作的内容,java,mysql,hibernate,Java,Mysql,Hibernate,我正在使用mysql。以下查询在mysql浏览器中工作,但当我在hibernate中使用此查询时,它会在内部选择附近出现异常,如: unexpected token: ( near line 1, column 104 这是第二个select子句的错误 查询是: delete from table where columnA in ( select columnA from ( select columnA from table group by

我正在使用mysql。以下查询在mysql浏览器中工作,但当我在hibernate中使用此查询时,它会在内部选择附近出现异常,如:

unexpected token: ( near line 1, column 104
这是第二个select子句的错误

查询是:

delete from table 
where columnA in (
  select columnA
  from (
      select columnA
      from table
      group by columnA
      having count(*) > 1
      ) t  
)

有人知道为什么会这样以及如何解决吗?

你的别名't'从未被使用过。试试这个:)

如果您正在处理Hibernate,请尝试使用Hibernate查询语言(HQL)。例如,我们使用HQL以更灵活的方式删除实体,例如删除价格高于指定数量的产品

Query query = session.createQuery("delete Product where price > :maxPrice");
query.setParameter("maxPrice", new Float(1000f));

int result = query.executeUpdate();

if (result > 0) {
    System.out.println("Expensive products was removed");
}
您还可以使用类HibernateTemplate中的方法execute(HibernateCallback操作)。它可能是这样的:

final Criterion criteria;
HibernateTemplate template;
template.execute(new HibernateCallback() {
    @Override
    public Object doInHibernate(Session session) throws HibernateException, SQLException {
        List toDelete = session.createCriteria(Student.class).add(criteria).list();
        for (Object o: toDelete){
            session.delete(o);
        }
    }
});

IMHO此解决方案不是很有效,因为您必须在删除所有条目之前读取它们。更重要的是,您必须逐个删除每个条目,这是非常无效的。

您的别名't'从未使用过。试试这个:)

如果您正在处理Hibernate,请尝试使用Hibernate查询语言(HQL)。例如,我们使用HQL以更灵活的方式删除实体,例如删除价格高于指定数量的产品

Query query = session.createQuery("delete Product where price > :maxPrice");
query.setParameter("maxPrice", new Float(1000f));

int result = query.executeUpdate();

if (result > 0) {
    System.out.println("Expensive products was removed");
}
您还可以使用类HibernateTemplate中的方法execute(HibernateCallback操作)。它可能是这样的:

final Criterion criteria;
HibernateTemplate template;
template.execute(new HibernateCallback() {
    @Override
    public Object doInHibernate(Session session) throws HibernateException, SQLException {
        List toDelete = session.createCriteria(Student.class).add(criteria).list();
        for (Object o: toDelete){
            session.delete(o);
        }
    }
});


IMHO此解决方案不是很有效,因为您必须在删除所有条目之前读取它们。更重要的是,您必须逐个删除每个条目,这是非常无效的。

这个孤立的“t”在做什么?@Vihar子查询别名但未使用,所以orphan@Vihar有些数据库即使未使用也需要别名,尽管我不确定mysqloh是否正确,我明白了。。谢谢这个孤儿“t”在做什么?@Vihar子查询别名但未使用,所以orphan@Vihar有些数据库即使未使用也需要别名,尽管我不确定mysqloh是否正确,我明白了。。thanksit给出如下错误:“您不能在FROM子句中指定更新的目标表”为什么在Hibernate中使用本机SQL。改用Hibernates功能:)我正在使用hql查询。我已经在hql中转换了它,但在hql中它不起作用。你能为这个案例分享你的DAO吗?很抱歉,由于一些隐私,不能这样做。如果您想知道columnA的数据类型,那么它就是string。它给出如下错误:“您不能在FROM子句中指定更新的目标表”为什么在Hibernate中使用本机SQL。改用Hibernates功能:)我正在使用hql查询。我已经在hql中转换了它,但在hql中它不起作用。你能为这个案例分享你的DAO吗?很抱歉,由于一些隐私,不能这样做。如果您想知道columnA的数据类型,那么它就是string。