Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用hibernate限制删除查询_Java_Sql_Oracle_Hibernate_Hql - Fatal编程技术网

Java 使用hibernate限制删除查询

Java 使用hibernate限制删除查询,java,sql,oracle,hibernate,hql,Java,Sql,Oracle,Hibernate,Hql,我想创建一个新的功能,以编程方式从表中删除行,并限制行数。这可能需要删除数千个元素。使用的数据库是Oracle 主要问题是HQL不支持删除的限制或rownum。我们只有select的setMaxResults 我想到的解决办法是: 使用select,然后在列表上循环删除列表中的每个元素。 使用session.createSQLQueryto可以在查询中使用limit。 第1点:我想避免这种情况,因为我不喜欢在事后将元素带到内存中删除它们,因为元素可以是任何数字,例如1000000,我对元素的数量

我想创建一个新的功能,以编程方式从表中删除行,并限制行数。这可能需要删除数千个元素。使用的数据库是Oracle

主要问题是HQL不支持删除的限制或rownum。我们只有select的setMaxResults

我想到的解决办法是:

使用select,然后在列表上循环删除列表中的每个元素。 使用session.createSQLQueryto可以在查询中使用limit。 第1点:我想避免这种情况,因为我不喜欢在事后将元素带到内存中删除它们,因为元素可以是任何数字,例如1000000,我对元素的数量没有限制。有什么我遗漏的,我可以帮助我解决这个问题吗

第2点:我不知道session.createSQLQuery和session.createQuery之间的性能差异是什么,是否存在使用session.createSQLQuery的Invonvence?

其他选项

您可以尝试迭代/加载每个对象并将其删除。看起来很丑

您可以编写两个单独的HQL查询,其中第一个查询的结果被输入到另一个执行实际删除的查询中

其他选项

您可以尝试迭代/加载每个对象并将其删除。看起来很丑

您可以编写两个单独的HQL查询,其中第一个查询的结果被输入到另一个执行实际删除的查询中

您可以删除对象会话。删除对象 原因是为了删除对象,Hibernate要求对象处于持久状态。因此,Hibernate首先获取对象SELECT,然后将其删除。必须具有对象id才能将其删除

您使用Hibernate是因为它不依赖于您使用的数据库,所以createQuery是Hibernate的一个非常强大的功能,在createQuery中,Hibernate首先从jar或您的依赖项知道数据库类型,然后将SQL语句映射到要在该数据库上运行的最佳语句,在session.createSQLQuery中,您正在编写本机SQL,因此它取决于您使用的DBMS休眠特性

您可以删除对象会话。删除对象 原因是为了删除对象,Hibernate要求对象处于持久状态。因此,Hibernate首先获取对象SELECT,然后将其删除。必须具有对象id才能将其删除

您使用Hibernate是因为它不依赖于您使用的数据库,所以createQuery是Hibernate的一个非常强大的功能,在createQuery中,Hibernate首先从jar或您的依赖项知道数据库类型,然后将SQL语句映射到要在该数据库上运行的最佳语句,在session.createSQLQuery中,您正在编写本机SQL,因此它取决于您使用的DBMS休眠特性


在删除查询中设置限制的目的是什么?要么您的数据符合某些条件,要么应该删除,要么不删除。限制的用法没有意义。第1点是纯粹邪恶的本质,不需要从数据库中提取数据,通过网络发送数据来删除它们。我必须这样做,因为用户需要。如果目的是分段清除,那么您应该使用真正的服务器端SQL。在删除查询中设置限制的目的是什么?要么您的数据符合某些条件,要么应该删除,要么不删除。限制的用法没有意义。第1点是纯粹邪恶的本质,不需要从数据库中提取数据,通过网络发送数据来删除它们。我必须这样做,因为用户需要如果目的是分段清除,然后你应该使用真正的服务器端SQL。我加起来投票是因为这些想法,我没有想到第二个。我加起来投票是因为这些想法,我没有想到第二个。我加起来投票了,但是hibernate功能在我的问题中不清楚。我加起来投票了,但是hibernate功能在我的问题中不清楚问题