Orika是否支持从java.util.Set映射?

Orika是否支持从java.util.Set映射?,java,mapping,orika,Java,Mapping,Orika,我以前曾使用Orika成功地在许多不同的对象和集合之间进行映射,但在尝试将java.util.Set映射到一系列字段时遇到了一个问题。如果可能的话,我不希望将集合更改为SortedSet或List SourceObject具有属性集setField,DestinationObject具有我试图映射到的各种字符串属性 mapperFactory.classMap(SourceObject.class, DestinationObject.class) .field(

我以前曾使用Orika成功地在许多不同的对象和集合之间进行映射,但在尝试将java.util.Set映射到一系列字段时遇到了一个问题。如果可能的话,我不希望将集合更改为SortedSet或List

SourceObject具有属性集setField,DestinationObject具有我试图映射到的各种字符串属性

    mapperFactory.classMap(SourceObject.class, DestinationObject.class)
            .field("setField[0].propertyOne", "destinationOnePropertyOne")
            .field("setField[0].propertyTwo", "destinationOnePropertyTwo")
            .field("setField[1].propertyOne", "destinationTwoPropertyOne")
            .field("setField[1].propertyTwo", "destinationTwoPropertyTwo")
尝试此操作将在运行测试时引发以下异常:

Caused by: compile error: get(int) not found in java.util.Set
at javassist.compiler.TypeChecker.atMethodCallCore(TypeChecker.java:723)
at javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:688)
at javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:157)
at javassist.compiler.ast.CallExpr.accept(CallExpr.java:46)
at javassist.compiler.TypeChecker.atCastExpr(TypeChecker.java:547)
at javassist.compiler.JvstTypeChecker.atCastExpr(JvstTypeChecker.java:104)
at javassist.compiler.ast.CastExpr.accept(CastExpr.java:55)
at javassist.compiler.TypeChecker.booleanExpr(TypeChecker.java:515)
at javassist.compiler.TypeChecker.atBinExpr(TypeChecker.java:337)
at javassist.compiler.ast.BinExpr.accept(BinExpr.java:41)
at javassist.compiler.TypeChecker.booleanExpr(TypeChecker.java:527)
at javassist.compiler.TypeChecker.atBinExpr(TypeChecker.java:337)
at javassist.compiler.ast.BinExpr.accept(BinExpr.java:41)
at javassist.compiler.TypeChecker.booleanExpr(TypeChecker.java:523)
at javassist.compiler.TypeChecker.atExpr(TypeChecker.java:592)
at javassist.compiler.ast.Expr.accept(Expr.java:68)
at javassist.compiler.TypeChecker.booleanExpr(TypeChecker.java:527)
at javassist.compiler.TypeChecker.atBinExpr(TypeChecker.java:337)
at javassist.compiler.ast.BinExpr.accept(BinExpr.java:41)
at javassist.compiler.CodeGen.doTypeCheck(CodeGen.java:242)
at javassist.compiler.CodeGen.compileBooleanExpr(CodeGen.java:236)
at javassist.compiler.CodeGen.atIfStmnt(CodeGen.java:384)
at javassist.compiler.CodeGen.atStmnt(CodeGen.java:355)
at javassist.compiler.ast.Stmnt.accept(Stmnt.java:50)
at javassist.compiler.CodeGen.atStmnt(CodeGen.java:351)
at javassist.compiler.ast.Stmnt.accept(Stmnt.java:50)
at javassist.compiler.CodeGen.atMethodBody(CodeGen.java:292)
at javassist.compiler.CodeGen.atMethodDecl(CodeGen.java:274)
at javassist.compiler.ast.MethodDecl.accept(MethodDecl.java:44)
at javassist.compiler.Javac.compileMethod(Javac.java:169)
at javassist.compiler.Javac.compile(Javac.java:95)
at javassist.CtNewMethod.make(CtNewMethod.java:74)
... 79 more
看起来Orika假设集合上有一个get(int)方法,而不是尝试使用迭代器。有没有办法坚持使用集合,或者我需要进行重构以使用另一种集合类型


谢谢你的任何想法

您试图通过索引访问集合元素,这就是问题所在


如果要保留集合,则不应按索引映射元素或使用列表。

我也遇到了同样的问题,这就是我使用的解决方案

您必须将hbm从
标记更改为
标记(在我的情况下,我只更改了开始标记,没有其他选项,所有选项都与以前一样工作),例如(Request.hbm):

最后,Orika可以映射第一个索引为0的元素,例如:

.field("solutionCreated","Solutions[0].creatorFullName")
.field("solutionText","Solutions[0].resolutionText")

你能用一些例子解释一下吗?我们能用集合集吗?
private List<Solution> Solutions = new ArrayList<Solution>();
public List<Solution> getSolutions() {
    return Solutions;
}
public void setSolutions(List<Solution> sSolutions) {
    Solutions = sSolutions;
}
.field("solutionCreated","Solutions[0].creatorFullName")
.field("solutionText","Solutions[0].resolutionText")