[英]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 表達式。 因此,訪問整個消息(包括標題)是非常有益的。 選修的。
也許您更願意將該選項設置為false
,然后在您的查詢中您可以使用該idOfEntity
的參數作為:payload
占位符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.