49.11. 8. OneToMany
@OneToMany 주석의 목적은 List<?&
gt; 필드를 정의하거나 반복적인 그룹을 포함하는 레코드에서 작업할 수 있도록 하는 것입니다.
*Restrictions OneToMany*
많은 bindy의 경우 계층 구조의 여러 수준에서 정의된 반복을 처리할 수 없습니다.
OneToMany는 다음과 같은 경우에만 작동합니다.
- 반복 그룹을 포함하는 FIX 메시지 읽기 (= 태그/키 그룹)
- 반복적인 데이터를 사용하여 CSV 생성
주석 이름 | 레코드 유형 | level |
---|---|---|
OneToMany | all | 속성 |
매개변수 이름 | type | 정보 |
---|---|---|
mappedTo | string | 선택 사항 - 문자열 - List<Type of the Class> 유형과 연결된 클래스 이름 |
Case 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 클래스에는 도서 목록이 포함되어 있습니다.
반복적인 데이터를 사용하여 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; }
매우 간단한 것은 아닙니다!!
case 2 : tags/keys 그룹을 포함하는 FIX 메시지
다음은 모델에서 처리하려는 메시지입니다.
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가 반복됩니다.
및 코드
태그/키 그룹이 포함된 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; }