60.2.8. 8.OneToMany
注释 @OneToMany
的目的是允许使用 List<?>
字段来定义 POJO 类,或者从包含重复组的记录。
OneToMany
的限制要小心,很多绑定都不允许处理在几个层次结构级别上定义的重复请求。
在以下情况下,关系 oneToMany ONLY WORKS:
- 读取包含重复组(= 标签/密钥组)的 FIX 消息。
- 使用重复数据生成 CSV
注解名称 | 记录类型 | 级别 |
---|---|---|
OneToMany | all | 属性 |
参数名称 | 类型 | 必填 | 默认值 | info |
---|---|---|---|---|
mappedTo | 字符串 | 与 Class> 的 List<Type 类型关联的类名称 |
问题单 1:使用重复数据生成 CSV
以下是我们想要的 CSV 输出:
Claus,Ibsen,Camel in Action 1,2010,35 Claus,Ibsen,Camel in Action 2,2012,35 Claus,Ibsen,Camel in Action 3,2013,35 Claus,Ibsen,Camel in Action 4,2014,35
在首次、姓氏和年龄时,重复数据涉及书的标题及其发布日期是常见,用于建模的类。Author 类包含 Book 的列表。
使用重复数据生成 CSV
@CsvRecord(separator=",") public class Author { @DataField(pos = 1) private String firstName; @DataField(pos = 2) private String lastName; @OneToMany private List<Book> books; @DataField(pos = 5) private String Age; } public class Book { @DataField(pos = 3) private String title; @DataField(pos = 4) private String year; }
问题单 2:阅读包含标签/密钥组的消息
以下是要在我们模型中处理的消息:
8=FIX 4.19=2034=135=049=INVMGR56=BRKR 1=BE.CHM.00111=CHM0001-0158=this is a camel - bindy test 22=448=BE000124567854=1 22=548=BE000987654354=2 22=648=BE000999999954=3 10=220
标签 22、48 和 54 会重复。
和代码:
读取包含 tags/keys 组的 FIX 消息
public class Order { @Link Header header; @Link Trailer trailer; @KeyValuePairField(tag = 1) // Client reference private String account; @KeyValuePairField(tag = 11) // Order reference private String clOrdId; @KeyValuePairField(tag = 58) // Free text private String text; @OneToMany(mappedTo = "org.apache.camel.dataformat.bindy.model.fix.complex.onetomany.Security") List<Security> securities; } public class Security { @KeyValuePairField(tag = 22) // Fund ID type (Sedol, ISIN, ...) private String idSource; @KeyValuePairField(tag = 48) // Fund code private String securityCode; @KeyValuePairField(tag = 54) // Movement type ( 1 = Buy, 2 = sell) private String side; }