48.11. 8.OneToMany

注释 @OneToMany 的目的是允许使用 List<?& gt; 字段定义 POJO 类或包含重复组的记录。

*Restrictions OneToMany*

请注意,一个到许多绑定的绑定都不允许处理在层次结构的多个级别上定义的重复数据

在以下情况下,根据以下情况的关系:

  • 阅读包含重复组(=组 tags/keys)的修复消息
  • 使用重复数据生成 CSV
注解名称记录类型级别

OneToMany

all

属性

参数名称typeinfo

mappedTo

字符串

可选 - string - 与 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

Remark:与本书的标题及其发布日期有关的重复数据,而姓氏、姓氏和年龄是通用的

和用于建模的类。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;
}