Camel-JPA @Consumed为插入和更新生成不同的代码

时间:2014-04-14 06:27:13

标签: java jpa integration apache-camel

您好目前使用Camel 2.12.2来处理我们构建的应用程序的导出。 我们使用camel-jpa组件执行导出,以从名为XML_EXPORT的表中获取记录。我们使用命名查询从此表中提取记录,

@NamedQuery(name = "export_data",
        query = "select x from MessageExport x where x.isExported = 'N'")

@Consumed部分如下所示:

@Consumed
public void markExported() {
    setExportedDatetime(new Date());
    setIsExported("Y");
}

JPA组件配置如下所示:

jpa:...MessageExport?consumer.namedQuery=export_data&consumeDelete=false&consumer.lockModeType=PESSIMISTIC_WRITE&consumer.delay=10000

现在让我们说我使用isExported =' N'将记录插入XML_EXPORT表。我期望骆驼获取记录,处理它,然后更新isExported和exportedDatetime作为我的@Consumed方法状态。它的作用!

来自骆驼日志:

UPDATE XML_EXPORT SET EXPORTED_DATETIME = ?, IS_EXPORTED = ? WHERE (ID = ?)
bind => [2014-04-14 08:18:04.853, Y, 9]

出于测试目的,我有时想重新发送相同的消息。要做到这一点,我只需要更新我要重新发送的记录,并将其设置为isExported to' N'的值。 并且消息会再次导出。

这是wierd(?)部分,这是我运行更新语句后生成的内容

UPDATE XML_EXPORT SET EXPORTED_DATETIME = ? WHERE (ID = ?)
bind => [2014-04-13 11:54:53.97, 5]

因此,由于某种原因,此处没有生成代码来设置isExported到' Y',只有日期代码。我觉得这很混乱。结果是此消息一次又一次地导出,因为命名查询将始终使用isExported =' N'来找到记录。

现在,只需更改我的命名查询以查看exportedDatetime而不是isExported,我就可以轻松解决这个问题,因为始终会为exportedDatetime生成update语句。

但是,我真的想了解为什么Camel生成的更新语句在这两种情况下看起来有所不同?我希望@Consumed方法的行为一致。

编辑: 这是isExported列的注释:

@Column(name="IS_EXPORTED", columnDefinition="VARCHAR2(1 CHAR)")
private String isExported;

0 个答案:

没有答案