Java 我们可以在JPQL中编写描述表查询吗?
我从用户处获取“关键字”和表名。 现在,我想查找表中数据类型为varchar(String)的所有列。 然后我将创建一个查询,将关键字与这些列进行比较,匹配的行将作为结果集返回 我尝试了Java 我们可以在JPQL中编写描述表查询吗?,java,spring,jpa,spring-mvc,jpql,Java,Spring,Jpa,Spring Mvc,Jpql,我从用户处获取“关键字”和表名。 现在,我想查找表中数据类型为varchar(String)的所有列。 然后我将创建一个查询,将关键字与这些列进行比较,匹配的行将作为结果集返回 我尝试了desctable\u namequery,但没有成功 我们可以在JPQL中编写描述表查询吗? 如果没有,那么有没有其他方法来解决上述情况? 请提前帮助并感谢您。根据我的说法,我们不能在jpql中使用描述查询。根据我的说法,我们不能在jpql中使用描述查询。不需要解决方法,因为这不是该技术的缺点。需要改变的不是J
desctable\u name
query,但没有成功
我们可以在JPQL中编写描述表查询吗?
如果没有,那么有没有其他方法来解决上述情况?
请提前帮助并感谢您。根据我的说法,我们不能在jpql中使用描述查询。根据我的说法,我们不能在jpql中使用描述查询。不需要解决方法,因为这不是该技术的缺点。需要改变的不是JPQL,而是您对技术的选择。在JPQL中,您甚至不能从表中选择数据。您可以从类中进行选择,这些类可以一次映射到多个表,从而生成用于最简单查询的SQL联接。描述这样的连接是没有意义的。即使您可以描述一个表,您也不会在JPQL中使用列的名称,而是使用对象的属性。用JPQL描述表毫无意义 JPQL用于查询对象,而不是表。此外,它还适用于静态工作(类一次性映射到关系),而不适用于动态工作,如将表映射到动态对象或实时检查数据库(这就是ror的AR的用途)。动态发现属性不是其中的一部分 根据您真正想要实现的目标(我们只知道您想做什么,这是不同的),您有两个基本选择:
- 如果您试图以动态方式编写一个软件,以便它能够根据模式中的更改进行自我调整,那么请删除JPQL(或任何其他ORM)。Java类是静态的,您不能真正将它们映射到动态表(或增加新属性)。使用行集,它们工作得很好,可以让您使用SQL
- 如果您正在构建一个可由许多项目共享的智能库,因此必须使用许多不同的静态映射,那么可以使用反射API查找您查询的对象的属性。表中列的名称对您没有任何帮助,因为在JPQL查询中,您必须使用映射中定义的名称
- 如果您试图以动态方式编写一个软件,以便它能够根据模式中的更改进行自我调整,那么请删除JPQL(或任何其他ORM)。Java类是静态的,您不能真正将它们映射到动态表(或增加新属性)。使用行集,它们工作得很好,可以让您使用SQL
- 如果您正在构建一个可由许多项目共享的智能库,因此必须使用许多不同的静态映射,那么可以使用反射API查找您查询的对象的属性。表中列的名称对您没有任何帮助,因为在JPQL查询中,您必须使用映射中定义的名称
- 不需要任何变通方法,因为这不是该技术的缺点。需要改变的不是JPQL,而是您对技术的选择。在JPQL中,您甚至不能从表中选择数据。您可以从类中进行选择,这些类可以一次映射到多个表,从而生成用于最简单查询的SQL联接。描述这样的连接是没有意义的。即使您可以描述一个表,您也不会在JPQL中使用列的名称,而是使用对象的属性。用JPQL描述表毫无意义
JPQL用于查询对象,而不是表。此外,它还适用于静态工作(类一次性映射到关系),而不适用于动态工作,如将表映射到动态对象或实时检查数据库(这就是ror的AR的用途)。动态发现属性不是其中的一部分
根据您真正想要实现的目标(我们只知道您想做什么,这是不同的),您有两个基本选择:
社区中有一些关于JPA未来版本中持久单元的动态定义的讨论:映射数据库字典表并从中读取所需数据。对于Oracle数据库,您需要从以下三个表中进行选择:用户标签注释、用户标签注释、用户标签注释;实现描述语句的全部功能 关于JPA未来版本中持久单元的动态定义,社区中有一些讨论: