Camel-JPA: нет опции для отправки командного сообщения компоненту JPA (как в компоненте JDBC)

В компоненте Camel-JDBC мы можем отправить оператор выбора в качестве тела конечной точке jdbc, которая возвращает результаты.

Ниже приведен пример кода с веб-сайта Camel-JDBC:

from("direct:projects")
   .setHeader("lic", constant("ASF"))
   .setHeader("min", constant(123))
   .setBody("select * from projects where license = :?lic and id > :?min order by id")
   .to("jdbc:myDataSource?useHeadersAsParameters=true")

Почему такая опция отсутствует в компоненте Camel-JPA?

Использование конечной точки JPA в качестве потребителя будет опрашивать базу данных. Но все, что я хочу, это просто получить данные один раз.

1 ответ

Верблюд не имеет этой функции, потому что JPA поддерживает именованные запросы. Вы можете сделать что-то в этом направлении.

from("direct:start")
    .pollEnrich("jpa:" + MyEntity.class.getName() + "?consumeDelete=false&consumer.namedQuery=myNamedQuery&consumer.parameters=#params", new MyAggregationStrategy())
.log(LoggingLevel.INFO, "call my entity toString method ${body}");



//spring context OR you can use camel registry
<util:map id="params" key-type="java.lang.String">
    <entry key="param1" value="1"/>
    <entry key="param2" value="2"/>
</util:map>

//JPA model
@Entity
@Table(name = "MyTable")
@NamedQuery(name = "myNamedQuery", query = "SELECT t FROM MyTable t WHERE t.columnName1 = :param1 AND t.columnName2 = :param2")
public class MyEntity implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Column(name = "PrimaryKey", updatable = false, nullable = false, length = 20)
    private String primaryKey;

    @Column(name = "Param1", length = 5)
    private String param1;

    @Column(name = "Param2", length = 5)
    private String param2;

    //removed setters getters, hascode, equals, and toString for brevity
}
Другие вопросы по тегам