簡體   English   中英

如何從 MessagingGateway 設置 Jpa 查詢參數?

[英]How do I set the Jpa Query parameter from MessagingGateway?

我正在使用 Java 實現事務性發件箱模式。消息中繼服務將輪詢發件箱表中的條目,在找到並處理發件箱消息后,它將更新發件箱條目。

問題是,如何將參數從 MessagingGateway 設置為 Jpa 查詢?

@Bean
public JpaExecutor jpaUpdateStateExecutor() {
    JpaExecutor jpaExecutor = new JpaExecutor(this.entityManagerFactory);
    jpaExecutor.setNamedQuery("myQuery");
    jpaExecutor.setUsePayloadAsParameterSource(true);
    jpaExecutor.setExpectSingleResult(true);
    return jpaExecutor;
}

@Bean
@ServiceActivator(inputChannel = "jpaChannel")
public MessageHandler jpaOutbound() {
    JpaOutboundGateway gateway = new JpaOutboundGateway(jpaUpdateStateExecutor());
    gateway.setGatewayType(OutboundGatewayType.UPDATING);
    return gateway;
}

我的網關:

@MessagingGateway
public interface MyGateway {
    @Gateway(requestChannel = "jpaChannel")
    @Transactional
    void jpaActions(Long idOfEntity);
}

我的域名 object:

@Entity
@Getter
@Setter
@ToString
@NoArgsConstructor
@Table
@NamedQuery(name = "myQuery", query = "UPDATE MyTable SET state = 'PROCESSED' WHERE id = :id")
public class Outbox {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private Long id;

    private String state;
}

很高興看到您的查詢以及您希望如何將Long idOfEntity映射到某個查詢參數。

setUsePayloadAsParameterSource的文檔如下所示:

使用有效負載作為參數源

如果設置為 true,消息的有效負載將用作參數源。 如果設置為 false,則整個消息都可用作參數源。 如果沒有傳入 JPA 參數,則該屬性默認為true。 這意味着,如果您使用默認的BeanPropertyParameterSourceFactory ,有效負載的 bean 屬性將用作 JPA 查詢的參數值的來源。 但是,如果傳入 JPA 參數,則默認情況下,此屬性的計算結果為 false。 原因是 JPA 參數讓你提供 SpEL 表達式。 因此,訪問整個消息(包括標題)是非常有益的。 選修的。

https://docs.spring.io/spring-integration/docs/current/reference/html/jpa.html#jpa-outbound-gateway-common-parameters

也許您更願意將該選項設置為false ,然后在您的查詢中您可以使用該idOfEntity的參數作為:payload占位符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM