You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Calle Andersson <ca...@hotmail.com> on 2021/08/24 16:39:06 UTC

Passing exchange header into JPA component query

Hi,

I use Camel 3.4 and have a question regarding the JPA component.

I have the following query:
SELECT c FROM " + MyEntity.class.getName() + " c WHERE c.dummy = :myParam

I have been trying to get the following configuration to work (using Endpoint DSL):
.toD(jpa(MyEntity.class.getName()).query("SELECT c FROM " + MyEntity.class.getName() + " c WHERE c.dummy = ${headers.myParam}"))

But then I get the following Exception:
org.hibernate.QueryException: unexpected char: '{' [SELECT c FROM se.test.MyEntity c WHERE c.dummy = ${headers.myParam}]

While googling, I have seen someone claim that the configuration above should work. Is this something that works in later versions of Camel or is it a dead end?

I have been able to make the query work with the following solution:
.process(exchange -> {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("myParam", exchange.getIn().getHeader("myParam"));
        exchange.getIn().setHeader(JpaConstants.JPA_PARAMETERS_HEADER, map);
})
.to(jpa(MyEntity.class.getName()).query("SELECT c FROM " + MyEntity.class.getName() + " c WHERE c.dummy = :myParam"))

Could this be solved in a more elegant way?

Thanks in advance,
Calle

Re: Passing exchange header into JPA component query

Posted by Calle Andersson <ca...@hotmail.com>.
Thanks for your answer.

Unfortunately, I have to use Camel 3.4 for now. However, it is good to know there is a possibility it might work in future release.

Regards,
Calle


________________________________
Från: Claus Ibsen <cl...@gmail.com>
Skickat: onsdag 25 augusti 2021 06:56
Till: users@camel.apache.org
Ämne: Re: Passing exchange header into JPA component query

Hi

You can try test this with 3.11.x as there has been a number of
improvements and bug fixes in the endpoint-dsl and whatnot since this
release.

On Tue, Aug 24, 2021 at 6:39 PM Calle Andersson
<ca...@hotmail.com> wrote:
>
> Hi,
>
> I use Camel 3.4 and have a question regarding the JPA component.
>
> I have the following query:
> SELECT c FROM " + MyEntity.class.getName() + " c WHERE c.dummy = :myParam
>
> I have been trying to get the following configuration to work (using Endpoint DSL):
> .toD(jpa(MyEntity.class.getName()).query("SELECT c FROM " + MyEntity.class.getName() + " c WHERE c.dummy = ${headers.myParam}"))
>
> But then I get the following Exception:
> org.hibernate.QueryException: unexpected char: '{' [SELECT c FROM se.test.MyEntity c WHERE c.dummy = ${headers.myParam}]
>
> While googling, I have seen someone claim that the configuration above should work. Is this something that works in later versions of Camel or is it a dead end?
>
> I have been able to make the query work with the following solution:
> .process(exchange -> {
>         Map<String, Object> map = new HashMap<String, Object>();
>         map.put("myParam", exchange.getIn().getHeader("myParam"));
>         exchange.getIn().setHeader(JpaConstants.JPA_PARAMETERS_HEADER, map);
> })
> .to(jpa(MyEntity.class.getName()).query("SELECT c FROM " + MyEntity.class.getName() + " c WHERE c.dummy = :myParam"))
>
> Could this be solved in a more elegant way?
>
> Thanks in advance,
> Calle



--
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2


Re: Passing exchange header into JPA component query

Posted by Claus Ibsen <cl...@gmail.com>.
Hi

You can try test this with 3.11.x as there has been a number of
improvements and bug fixes in the endpoint-dsl and whatnot since this
release.

On Tue, Aug 24, 2021 at 6:39 PM Calle Andersson
<ca...@hotmail.com> wrote:
>
> Hi,
>
> I use Camel 3.4 and have a question regarding the JPA component.
>
> I have the following query:
> SELECT c FROM " + MyEntity.class.getName() + " c WHERE c.dummy = :myParam
>
> I have been trying to get the following configuration to work (using Endpoint DSL):
> .toD(jpa(MyEntity.class.getName()).query("SELECT c FROM " + MyEntity.class.getName() + " c WHERE c.dummy = ${headers.myParam}"))
>
> But then I get the following Exception:
> org.hibernate.QueryException: unexpected char: '{' [SELECT c FROM se.test.MyEntity c WHERE c.dummy = ${headers.myParam}]
>
> While googling, I have seen someone claim that the configuration above should work. Is this something that works in later versions of Camel or is it a dead end?
>
> I have been able to make the query work with the following solution:
> .process(exchange -> {
>         Map<String, Object> map = new HashMap<String, Object>();
>         map.put("myParam", exchange.getIn().getHeader("myParam"));
>         exchange.getIn().setHeader(JpaConstants.JPA_PARAMETERS_HEADER, map);
> })
> .to(jpa(MyEntity.class.getName()).query("SELECT c FROM " + MyEntity.class.getName() + " c WHERE c.dummy = :myParam"))
>
> Could this be solved in a more elegant way?
>
> Thanks in advance,
> Calle



-- 
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2