2016-05-12 2 views
1

、我々は結果を返します。jdbcエンドポイントに体としてselect文を送ることができます。サンプルコードの下キャメル-JPA:キャメル-JDBCコンポーネントでJPAコンポーネントにコマンドメッセージを送信するためのオプションなし(JDBCのcomopnentのように)

はキャメル-JDBCのWebサイトからです:

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") 

なぜキャメル-JPAコンポーネントに存在していないようなオプションがありますか?

JPAエンドポイントをコンシューマとして使用すると、データベースがポーリングされます。しかし、私が望むのは、データを一度取得することだけです。

答えて

1

JPAが名前付きクエリをサポートしているため、Camelにはその機能がありません。あなたはこれらの行に沿って何かをすることができます。

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 
} 
+0

しかし、これはまだDB権をポーリングしますか?私はDBに一度問い合わせ、それをポーリングしないだけです。 – ndsurendra

+0

このソリューションはポーリングしません。 「pollEnrich」という名前は少し混乱しています。 enrichとpollEnrichの比較は次のとおりです。http://stackoverflow.com/questions/19098466/camel-content-enricher-enrich-vs-pollenrich –

+0

説明のため、データベースを一度呼び出すだけで、交換の内容を置き換えます。気軽に試してみてください。 –

関連する問題