3

我为构建服务器集成创建了一个 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]

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

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

4

1 回答 1

0

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

在课堂上A

...

@OneToMany
B[] getBs();

...

在课堂上B

...

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

...

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

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

于 2016-10-25T14:34:52.570 回答