Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.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 在数据库的所有表中搜索值_Java_Postgresql_Hibernate_Jpa - Fatal编程技术网

Java 在数据库的所有表中搜索值

Java 在数据库的所有表中搜索值,java,postgresql,hibernate,jpa,Java,Postgresql,Hibernate,Jpa,我有下面的问题,我正试图找到一个优雅的解决方案。 前端显示一个搜索输入字段。允许用户输入任何字符串。我想向后端发送一个请求,并获取任何列中包含输入值的所有实体。无法在哪个表和哪个列中找到输入的字符串。 例子: 实体:人类、建筑、地球 它们都有15个以上的属性。 现在,用户在搜索字段中输入数字12。我希望后端在数据库中找到任何条目,其中包含数字12,可能是一个人的鞋码或建筑物所在的街道号,等等。 作为后端技术,我使用JPA(Hibernate)和Postgres数据库。 我希望尽可能地实现它,这样

我有下面的问题,我正试图找到一个优雅的解决方案。 前端显示一个搜索输入字段。允许用户输入任何字符串。我想向后端发送一个请求,并获取任何列中包含输入值的所有实体。无法在哪个表和哪个列中找到输入的字符串。 例子: 实体:人类、建筑、地球 它们都有15个以上的属性。 现在,用户在搜索字段中输入数字12。我希望后端在数据库中找到任何条目,其中包含数字12,可能是一个人的鞋码或建筑物所在的街道号,等等。 作为后端技术,我使用JPA(Hibernate)和Postgres数据库。 我希望尽可能地实现它,这样,如果出现新表或新属性,我就不必修改任何内容。 我已经尝试过的是获取所有表名,如下所示:

"select col.table_name from information_schema.columns col join information_schema.tables tab on tab.table_schema = col.table_schema and tab.table_name = col.table_name and tab.table_type = 'BASE TABLE' where col.table_schema not in ('information_schema', 'pg_catalog')"
                + "group by col.table_name"
因为jpa查询使用Java类名而不是表名,所以没有什么困难。属性也存在同样的问题。使用本机查询来避免这个问题会使事情变得更加复杂。
有什么好的解决方案可以在整个数据库中搜索特定的值吗?

对于RDBMS(或JPA)来说,这不是一个真正合适的用例。您可以使用本机查询或存储过程来搜索该值。但这确实不是一个好主意,因为根据数据库的大小,搜索可能需要花费很多时间。用户需要缩小范围,这是一个。一旦程序离开开发实验室,数据库开始增大,对数据库中的每个表进行全表扫描将永远无法正常运行。你要问的是文本搜索是为了解决什么问题而发明的。忘记构建动态查询来对数据库中的每个表进行完整的表扫描,而是考虑向数据库中添加文本搜索功能。