2016-03-02 89 views
1

我正在使用mysql。下面的查询是工作在mysql中的浏览器,但是当我在Hibernate中使用此查询它给了我靠近内选择喜欢的例外:删除不工作在休眠

unexpected token: (near line 1, column 104 

这是第二选择条款,给予错误。

查询:

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

不要任何人有想法,为什么会是这样,如何解决?

+0

这是什么孤儿'吨'? – Vihar

+0

@Vihar子查询别名 –

+0

但未使用,所以孤儿 – Vihar

回答

0

您的别名't'从未使用过。只需尝试一下:)

DELETE FROM table 
WHERE columnA IN (SELECT columnA 
     FROM table 
     GROUP BY columnA 
     HAVING COUNT(*) > 1); 

如果您正在处理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执行(HibernateCallback动作)。它看起来是这样的:

​​

恕我直言,这个解决方案不是很有效,因为你必须阅读所有条目删除它们。更重要的是你必须单独删除每个条目,这是非常不够的。

+0

它给出这样的错误: “您无法在FROM子句中指定目标表进行更新” –

+0

为什么在Hibernate中使用本机SQL?使用Hibernates功能:) –

+0

我正在使用hql查询。我已经在hql中转换它,但是在hql中它不起作用。 –