0
아래 예제를 고려하십시오.오리 카 매핑 중첩 된 하위 목록
Group.java (GroupDTO.java도 같은 특성을 갖는다)
import java.util.List;
public class Group {
public Group(List<Person> persons) {
this.persons = persons;
}
private List<Person> persons;
public List<Person> getPersons() {
return persons;
}
public void setPersons(List<Person> persons) {
this.persons = persons;
}
}
Person.java (PersonDTO.java도 같은 특성을 갖는다)
import java.util.List;
public class Person {
public Person(){}
public Person(List<Name> names, Integer age) {
this.names = names;
this.age = age;
}
private List<Name> names;
private Integer age;
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public List<Name> getNames() {
return names;
}
public void setNames(List<Name> names) {
this.names = names;
}
}
Name.java (NameDTO. java는 동일한 속성을 가짐)
public class Name {
public Name(String first, String last) {
this.first = first;
this.last = last;
}
private String first;
private String last;
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}
그리고 아래의 클래스를 실행할 때 다음 예외가 발생합니다.
import ma.glasnost.orika.MapperFacade;
import ma.glasnost.orika.MapperFactory;
import ma.glasnost.orika.impl.DefaultMapperFactory;
import ma.glasnost.orika.metadata.ClassMapBuilder;
import java.util.LinkedList;
import java.util.List;
public class Mapper {
public static void main(String[] args) {
List<Name> names = new LinkedList<Name>();
names.add(new Name("foo", "bar"));
names.add(new Name("lorem", "ipsum"));
List<Person> persons = new LinkedList<Person>();
persons.add(new Person(names, 30));
persons.add(new Person(names, 40));
Group g1 = new Group(persons);
MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
ClassMapBuilder classMapBuilder = mapperFactory.classMap(Group.class, GroupDTO.class);
classMapBuilder.field("persons{age}", "persons{age}");
classMapBuilder.field("persons{names{first}}", "persons{names{first}}");
classMapBuilder.field("persons{names{last}}", "persons{names{last}}");
classMapBuilder.byDefault().register();
MapperFacade mapper = mapperFactory.getMapperFacade();
GroupDTO groupDTO = mapper.map(g1, GroupDTO.class);
for(Person p:groupDTO.getPersons()){
System.out.println(p.getAge());
for(Name n:p.getNames()){
System.out.println(n.getFirst());
System.out.println(n.getFirst());
}
}
}
}
예외
Exception in thread "main" ma.glasnost.orika.MappingException: java.lang.NullPointerException
at ma.glasnost.orika.impl.generator.MapperGenerator.build(MapperGenerator.java:104)
at ma.glasnost.orika.impl.DefaultMapperFactory.buildMapper(DefaultMapperFactory.java:1480)
at ma.glasnost.orika.impl.DefaultMapperFactory.build(DefaultMapperFactory.java:1295)
at ma.glasnost.orika.impl.DefaultMapperFactory.getMapperFacade(DefaultMapperFactory.java:883)
at Mapper.main(Mapper.java:28)
Caused by: java.lang.NullPointerException
at ma.glasnost.orika.impl.generator.specification.MultiOccurrenceToMultiOccurrence.registerClassMaps(MultiOccurrenceToMultiOccurrence.java:397)
at ma.glasnost.orika.impl.generator.specification.MultiOccurrenceToMultiOccurrence.generateMappingCode(MultiOccurrenceToMultiOccurrence.java:72)
at ma.glasnost.orika.impl.generator.SourceCodeContext.mapAggregateFields(SourceCodeContext.java:721)
at ma.glasnost.orika.impl.generator.MapperGenerator.addMapMethod(MapperGenerator.java:182)
at ma.glasnost.orika.impl.generator.MapperGenerator.build(MapperGenerator.java:70)
... 4 more
긴 게시물에 대한 죄송합니다. 목록 <> 내부의지도 필드를 시도하고 있는데 또 다른 목록 <> 안에 있습니다. 최선의 접근 방법은 무엇입니까? 아니면 여기서 뭔가 잘못하고 있습니까?