2016-05-12 7 views
1

In der Camel-JDBC-Komponente können wir eine Select-Anweisung als Hauptteil an den jdbc-Endpunkt senden, der die Ergebnisse zurückgibt.Camel-JPA: Keine Option zum Senden einer Befehlsnachricht an die JPA-Komponente

Im Folgenden Beispielcode ist von der Camel-JDBC-Website:

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

Warum ist eine solche Option nicht in der Camel-PPV-Komponente?

Wenn Sie den JPA-Endpunkt als Verbraucher verwenden, wird die Datenbank abgefragt. Aber alles, was ich will, ist nur die Daten einmal zu bekommen.

Antwort

1

Camel verfügt nicht über dieses Feature, da JPA benannte Abfragen unterstützt. Sie können etwas in dieser Richtung tun.

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

Aber wird dies noch die DB abfragen, richtig? Ich möchte nur einmal die DB abfragen, nicht abfragen. – ndsurendra

+0

Nein, diese Lösung wird nicht abgefragt. Der Name "pollEnrich" ist leicht verwirrend. Hier ist ein Vergleich zwischen anreichern und pollEnrich: http://stackoverflow.com/questions/19098466/camel-content-enricher-enrich-vs-pollenrich –

+0

Zur Verdeutlichung Ja, Sie werden nur die Datenbank einmal aufrufen und den Inhalt Ihres Austauschs ersetzen . Bitte zögern Sie es nicht auszuprobieren. –

Verwandte Themen