【发布时间】:2017-12-19 11:26:36
【问题描述】:
我想从数据库中读取数据并创建一个 CSV 文件。为此,我使用 camel-jdbc 和 camel-bindy。
首先我使用 SELECT 语句设置正文。
SELECT [vendor],
[ean],
[itemid] AS itemId,
[quantity]
FROM [dbo].[ElectronicDeliveryNotes]
然后我调用jdbc组件
<to uri="jdbc:dataSource?outputType=SelectList&outputClass=com.xxx.Model"/>
这将返回一个模型列表。模型类是
@CsvRecord(separator = ";", generateHeaderColumns = true, crlf = "UNIX")
public class Model2 {
@DataField(pos = 1, columnName = "A_Liererant")
private String vendor;
@DataField(pos = 2, columnName = "F_EAN")
private String ean;
@DataField(pos = 3, columnName = "G_Lief. Artikelnummer")
private String itemId;
@DataField(pos = 4, columnName = "H_Menge")
private BigDecimal quantity;
//getters setters
我收到以下错误:
java.lang.IllegalArgumentException: Cannot map all properties to bean of type class com.xxx.Model2. There are 1 unmapped properties. {itemid=11.0441-5402.2}
据我了解,问题在于模型属性的命名。 我尝试过的一个解决方案是重命名模型 itemId => itemid。这会起作用,但我没有使用 Java 命名约定。
你知道如何在不重命名属性的情况下克服这个问题吗?
我也尝试了以下方法,但没有成功。
@DataField(pos = 3, columnName = "G_Lief. Artikelnummer", name = "itemid")
private String itemId;
【问题讨论】:
-
我想弄清楚你想要做什么。您是否尝试从表中读取并将其结果导出到 CSV 文件?当执行路由时,您会在上面收到此错误吗?我的理解正确吗?如果是这样,我可以建议另一种方法吗?
-
是的,我正在尝试从 db 读取记录并创建一个 csv 文件。执行 jdbc 时发生错误。如描述中所述,它无法映射属性 itemId,因此在模型类中重命名为 itemid 是一种可能的解决方案,但我想问是否有办法使用 java没有重命名属性的命名约定。你有什么想法吗?
-
你可以使用camel-sql。看看我的回答。稍后我会看一下camel-jdbc 替代方案,以便更接近您的问题。
标签: apache-camel bindy camel-jdbc