【问题标题】:Does Orika support mapping from java.util.Set?Orika 是否支持从 java.util.Set 映射?
【发布时间】:2014-04-07 18:17:01
【问题描述】:

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

SourceObject 具有 Set setField 属性,而 DestinationObject 具有我尝试映射到的各种 String 属性。

    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) 方法,而不是尝试使用迭代器。有没有办法坚持使用 Set,还是需要进行一些重构才能使用其他集合类型?

感谢您的任何想法!

【问题讨论】:

    标签: java mapping orika


    【解决方案1】:

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

    如果你想保留你的集合,你不应该按索引映射元素或使用 List。

    【讨论】:

    • 你能举个例子解释一下吗?
    • 我们可以为此使用集合集吗?
    【解决方案2】:

    我有同样的问题,这是我使用的解决方案。

    您必须将 hbm 从 <set> 标签更改为 <bag> 标签(在我的情况下,我只更改了开始标签,没有其他选项并且都像以前一样工作),例如(Request.hbm):

    <bag name="Solutions" table="S_SOLUTION" batch-size="20">
       <key>
          <column name="REQUEST_ID" not-null="true" />
        </key>
        <many-to-many entity-name="com.model.Solution">
            <column name="SOLUTION_ID" not-null="true" />
        </many-to-many>
    </bag>
    

    你必须在bean文件中更改后,将Set改为List,例如(Request.java):

    private List<Solution> Solutions = new ArrayList<Solution>();
    public List<Solution> getSolutions() {
        return Solutions;
    }
    public void setSolutions(List<Solution> sSolutions) {
        Solutions = sSolutions;
    }
    

    Orika 终于可以映射第一个索引为 0 的元素了,例如:

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

    【讨论】:

      猜你喜欢
      • 2011-04-18
      • 1970-01-01
      • 1970-01-01
      • 2017-03-22
      • 2010-10-13
      • 1970-01-01
      • 1970-01-01
      • 2013-12-20
      • 2018-02-19
      相关资源
      最近更新 更多