Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.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 如何在生产环境中动态更改JPA2.0SQL/JPQL查询_Java_Orm_Jpa_Jpa 2.0 - Fatal编程技术网

Java 如何在生产环境中动态更改JPA2.0SQL/JPQL查询

Java 如何在生产环境中动态更改JPA2.0SQL/JPQL查询,java,orm,jpa,jpa-2.0,Java,Orm,Jpa,Jpa 2.0,我对JPA2.0/ORM的架构有问题, 在我们的生产系统中(我相信在很多系统中),我们需要动态更改SQL查询的能力,因为只有在生产过程中才会暴露的查询(重载和重载数据)中存在缓慢的查询和错误, 因此,我们在存储过程中使用,并从iBatis调用它们 正如我看到的模式,最佳实践是在DB层和应用程序层之间分离,这样我就可以告诉我的DBA在生产中修复有缺陷的存储过程/索引表,而无需部署新的应用程序(分布式系统-部署时间长) 在ORM/JPA2.0中,代码中定义了命名查询,这是程序员在开发/QA中发现整个

我对JPA2.0/ORM的架构有问题, 在我们的生产系统中(我相信在很多系统中),我们需要动态更改SQL查询的能力,因为只有在生产过程中才会暴露的查询(重载和重载数据)中存在缓慢的查询和错误, 因此,我们在存储过程中使用,并从iBatis调用它们

正如我看到的模式,最佳实践是在DB层和应用程序层之间分离,这样我就可以告诉我的DBA在生产中修复有缺陷的存储过程/索引表,而无需部署新的应用程序(分布式系统-部署时间长)

在ORM/JPA2.0中,代码中定义了命名查询,这是程序员在开发/QA中发现整个数据库问题的原因——非常糟糕

我在API中看到,框架提供了一个定义本机查询的选项-但在书籍/教程中,最佳实践是使用命名查询

在我阅读Hibernate/JPA2.0规范以了解是否有解决此问题的方法之后, 我知道没有解决办法

在我看来,我需要定义在应用程序代码层中硬编码的查询,这非常复杂。。。 还要在XML描述符中定义查询,并通过热部署的补丁解决方案加载XML—非常糟糕,不是标准的

你有设计模式/解决方案吗

谢谢大家


Uri。

我建议您在部署之前进行单元和性能测试。你不应该在这么晚的时候发现错误或缓慢的查询

正如您所发现的,JPA/ORM不像iBatis

“Buggy”听起来像是缺乏彻底的单元测试

“慢”听起来像是DBA没有检查JPA生成的SQL。解释所有的计划。您可能会在数据库端遇到索引或模式问题,无论使用多少JPA都无法解决这些问题


模式不是解决方案。

我建议您在部署之前进行单元和性能测试。你不应该在这么晚的时候发现错误或缓慢的查询

正如您所发现的,JPA/ORM不像iBatis

“Buggy”听起来像是缺乏彻底的单元测试

“慢”听起来像是DBA没有检查JPA生成的SQL。解释所有的计划。您可能会在数据库端遇到索引或模式问题,无论使用多少JPA都无法解决这些问题


模式不是解决方案。

您应该能够让实体从视图和表中读取数据。然后可以动态更改视图的sql。

您应该能够让实体从视图和表中读取数据。然后可以动态更改视图的sql。

是的,但如果真的需要动态更改,但如果我在生产中发现了错误,我仍然希望在生产系统上修复它-存储过程是唯一的方法。。。在这种要求下,什么是最好的解决方案。谢谢存储过程不是实现这一点的唯一方法。如果你需要它是动态的,你可能不应该使用ORM。是什么让您首先从iBatis切换过来的?是的,但如果真的需要动态切换,但如果我在生产中发现了一个bug,我仍然希望在生产系统上修复它-存储过程是唯一的方法。。。在这种要求下,什么是最好的解决方案。谢谢存储过程不是实现这一点的唯一方法。如果你需要它是动态的,你可能不应该使用ORM。是什么让你从iBatis转换过来的?