添加数组字段的setter时,ActiveObjects抛出异常

问题描述 投票:3回答:1

我已经为构建服务器集成分叉了一个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建议的setter。但是,如果配置已存在,则会消除设置字段的可能性。我不认为删除ActiveObject并保存新的是这里的方法。

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

java bitbucket-server active-objects
1个回答
0
投票

我跟随Active Objects的方法是这样的。当你有一些实体,A,其中有许多另一个实体,B,每个B对象只有一个A,我添加这些片段:

在课堂上A

...

@OneToMany
B[] getBs();

...

在课堂上B

...

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

...

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

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

© www.soinside.com 2019 - 2024. All rights reserved.