[英]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.