【问题标题】:ActiveObjects throwing exception when adding setter for array field为数组字段添加设置器时,ActiveObjects 抛出异常
【发布时间】:2015-10-06 10:02:32
【问题描述】:

我已经创建了一个用于构建服务器集成的 Atlassian Stash 插件,它使用 ActiveObjects 组件来存储数据。我遇到以下问题:

如果我关注其他字段并为我的 OneToMany 字段添加一个 getter 和 setter,像这样

@OneToMany
TestMapping[] getTestMapping();
void setTestMapping(TestMapping[] powerMappings);

使用实体时出现以下异常:

[INFO] [talledLocalContainer] Caused by: java.lang.RuntimeException: Unrecognized type: [Lsome.package.TestMapping;
[INFO] [talledLocalContainer]   at net.java.ao.types.TypeManager.getType(TypeManager.java:68) ~[na:na]
[INFO] [talledLocalContainer]   at net.java.ao.schema.SchemaGenerator.getSQLTypeFromMethod(SchemaGenerator.java:481) ~[na:na]

谷歌搜索该问题只找到了删除设置器的解决方案,如this post 中建议的那样。但是,如果配置已经存在,这将消除设置字段的可能性。我不认为删除一个 ActiveObject 并保存一个新的是要走的路。

如何解决这个问题?或者如果不可能,如何在不使用 ActiveObjects 中的 setter 的情况下更新现有对象?

【问题讨论】:

    标签: java bitbucket-server active-objects


    【解决方案1】:

    我使用 Active Objects 遵循的方法是这样的。当你有一些实体A,它有许多另一个实体B,并且每个B 对象只有一个A,我添加这些sn-ps:

    在课堂A:

    ...
    
    @OneToMany
    B[] getBs();
    
    ...
    

    在课堂上B

    ...
    
    A getA();
    void setA(A a);
    
    ...
    

    请注意,在 B 类中添加的方法上没有任何注释,并且在类 A 上没有任何添加的 setter 方法,它位于“one-”的“one”一侧多对多”的关系。这种方法总是对我有用。如果您添加了一个不在此处的方法,您添加了一个我在这里没有使用的注解,或者您错过了将@OneToMany 放置在正确的位置,那么您通常会以无法识别的类型异常结束。

    我知道这真的很令人沮丧,因为该异常只会让您知道您的实体接口构造不正确,但它不会让您知道问题出在哪里。尝试完全复制我的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-28
      • 1970-01-01
      • 1970-01-01
      • 2011-01-28
      相关资源
      最近更新 更多