当前位置: 首页 > 知识库问答 >
问题:

Spring数据JPA@query是动态的还是命名的?

和光启
2023-03-14

Spring-data-jpa对@query注释中定义的query做了什么?它是在部署期间被翻译成SQL一次(如NamedQuery)还是每次都被翻译一次(如动态查询)?

共有1个答案

施锋
2023-03-14

Spring Data JPA在每次调用使用@query注释的查询方法时都会调用EntityManager.createquery(…)。原因很简单:EntityManager返回的查询实例不是线程安全的,实际上也不是有状态的,因为它们包含绑定的参数信息。

也就是说,大多数JPA持久化提供程序无论如何都执行某种基于文本的查询缓存,以便它们基本上为某个JPQL查询构建一次实际的SQL查询,并在后续调用中重用前者。

有趣的是,当我们在2008年开始构建对@query的支持时,我们研究了将手动声明的查询注册为JPA命名查询的可能性。不幸的是,直到今天,还没有通过JPA以编程方式手动注册命名查询的方法。

 类似资料:
  • 这里的问题是映射,我需要强制转换结果或手动检查一切。即使有更好的映射能力,我也不敢相信没有更好的方法来做到这一点。 我也试过这样做:https://stackoverflow.com/a/36329166/840315,但您需要将类路径硬编码到查询中以使其工作,而且我仍然需要将对象映射到不可变的对象。 使用JdbcTemplate,您可以使用(src): spring data JPA是否有类似的

  • 我正在使用Spring数据JPA存储库,并希望基于通过我的方法传递的参数构建自定义WHERE子句 是否可以像这样动态地设置我的WHERE子句? 所以我可以这样称呼我的方法: 它将创建查询: 以及: 将创建查询:

  • 问题内容: 是否存在有关如何命名Java枚举的“官方”建议? 要么 我知道在.Net世界中,建议使用单数形式,但表示位标志的枚举除外。只是好奇Java是否有类似的东西。 问题答案: Java中的枚举(通常可能是枚举)应为单数。这种想法是,您不是在选择多个协议,而是在值列表中选择一个协议。 注意没有复数形式:http : //docs.oracle.com/javase/tutorial/java/

  • 我无法让SPEL和Spring data jpa正常工作 以下是我的仓库 过滤元件 以下是MyEntity 主类 下面是我得到的错误

  • 问题内容: 按照标准书,构造函数是用于初始化对象的一种特殊类型的函数。由于构造函数被定义为一个函数,并且内部类函数只能具有两种类型的静态或非静态类型。我怀疑是什么构造函数? 我的疑问是如果构造函数是静态方法,那么我们如何在构造函数内部频繁使用此方法 输出是否意味着构造函数是非静态的? 问题答案: 您的第二个例子很重要。引用在构造函数中可用,这意味着构造函数是针对某个对象(当前正在创建的对象)执行的

  • 首先,目标。什么是单元测试?单元测试是测试最小功能的测试,与测试更多功能的集成测试相反,例如: 以任何方式或任何形式生成产品ApplicationContext的测试都不是单元测试; 触及或甚至知道应用程序(标记为@SpringBootApplication)类的测试不是单元测试; 从加载内容的测试不是单元测试 从Spring Cloud Config server加载外部配置测试绝对不是单元测试