{"id":1912,"date":"2015-01-10T15:01:45","date_gmt":"2015-01-10T20:01:45","guid":{"rendered":"http:\/\/alejandroayala.solmedia.ec\/?p=1912"},"modified":"2015-01-10T15:03:35","modified_gmt":"2015-01-10T20:03:35","slug":"jpa-hibernate-parametros-en-queries-nativas","status":"publish","type":"post","link":"https:\/\/alejandroayala.solmedia.ec\/?p=1912","title":{"rendered":"JPA Hibernate. Par\u00e1metros en Queries nativas"},"content":{"rendered":"<p>Cuando usamos <em><strong>Named Queries<\/strong><\/em> generalmente usamos tambi\u00e9n <em><strong>Named Parameters<\/strong><\/em>, Nuestra\u00a0 <em>Named Query<\/em> puede ser algo as\u00ed:<\/p>\n<p>[java]<br \/>\nSelect e from Tabla e where e.campo.campo = :parametro<br \/>\n[\/java]<\/p>\n<p>Y establecemos el parametro algo as\u00ed:<\/p>\n<p><!--more--><\/p>\n<p>[java]<br \/>\nquery.setParameter(&quot;parametro&quot;, 666.66);<br \/>\n[\/java]<\/p>\n<p>Pero si intentamos hacer lo mismo para Native Queries, muchas de las veces no funciona.<\/p>\n<p>[java]<br \/>\nSELECT campo_tabla FROM tabla WHERE otro_campo = :parametro<br \/>\n[\/java]<\/p>\n<p>He tenido este error en consultas nativas de este tipo:<\/p>\n<p>[java]<br \/>\nSELECT campo FROM tabla<br \/>\nwhere fecha BETWEEN TO_DATE(:fechaInicio,&#8217;mm-yyyy&#8217;) &#8230;<\/p>\n<p>SELECT campo FROM tabla<br \/>\nwhere fecha BETWEEN TO_DATE(&#8216;:fechaInicio&#8217;,&#8217;mm-yyyy&#8217;) &#8230;<br \/>\n[\/java]<\/p>\n<p>De las dos formas <strong>ten\u00eda un error<\/strong> de que no se pod\u00eda localizar el par\u00e1metro.<\/p>\n<p>En la especificaci\u00f3n de JPA indica que los Named Parameters no est\u00e1n soportados para consultas nativas.<\/p>\n<blockquote><p>Named parameters follow the rules for identifiers defined in Section 4.4.1. The use of named parameters applies to the Java Persistence query language, and is not defined for native queries. Only positional parameter binding may be portably used for native queries.<\/p><\/blockquote>\n<p>Para resolver el problema se debe usar como indica la especificaci\u00f3n <strong>Positional Parameter<\/strong>, algo asi:<\/p>\n<p>[java]<br \/>\nSELECT campo FROM tabla<br \/>\nwhere fecha BETWEEN TO_DATE(?1,&#8217;mm-yyyy&#8217;)&#8230;<\/p>\n<p>query.setParameter(1, fecha);<br \/>\n[\/java]<\/p>\n<p>En el enlace de fuente otras formas de usar <em>Named Parameters<\/em> con consultas nativas, algo tosco para mi gusto. Esto sobre un ambiente de Hibernate 3.x.<br \/>\nEspero les sea de utilidad.<\/p>\n<p>Fuente: <a title=\"http:\/\/stackoverflow.com\/questions\/3144235\/jpa-hibernate-native-queries-do-not-recognize-parameters\" href=\"http:\/\/stackoverflow.com\/questions\/3144235\/jpa-hibernate-native-queries-do-not-recognize-parameters\" target=\"_blank\">http:\/\/stackoverflow.com\/questions\/3144235\/jpa-hibernate-native-queries-do-not-recognize-parameters<\/a><\/p>\n<h3>EOF<\/h3>\n\n<div class=\"twitter-share\"><a href=\"https:\/\/twitter.com\/intent\/tweet?via=a1ejo_ayala\" class=\"twitter-share-button\" data-size=\"large\">Twittear<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Cuando usamos Named Queries generalmente usamos tambi\u00e9n Named Parameters, Nuestra\u00a0 Named Query puede ser algo as\u00ed: [java] Select e from Tabla e where e.campo.campo = :parametro [\/java] Y establecemos el parametro algo as\u00ed:<\/p>\n","protected":false},"author":1,"featured_media":690,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[4],"tags":[173,506,116,203,474,473,475,476],"_links":{"self":[{"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/posts\/1912"}],"collection":[{"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1912"}],"version-history":[{"count":3,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/posts\/1912\/revisions"}],"predecessor-version":[{"id":1915,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/posts\/1912\/revisions\/1915"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/media\/690"}],"wp:attachment":[{"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1912"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1912"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1912"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}