问题描述
我正在尝试将 ISIS 与 JDO 结合使用。我偶然发现了 Enums 的一个问题,我可以在直接/简单的 Java JDO 项目上重现该问题。
代码可以从
curl https://codeload.github.com/apache/isis-app-helloworld/zip/jdo | jar xv
我在 pom.xml 中添加了 lombok 依赖项:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
我创建了一个类
package domainapp.modules.hello.dom.hwo;
import javax.jdo.annotations.IdentityType;
import lombok.AllArgsConstructor;
import lombok.Getter;
@javax.jdo.annotations.PersistenceCapable(identityType = IdentityType.DATASTORE,schema = "hello" )
@AllArgsConstructor
@Getter
public enum HelloWorldTypeEnum {
BIG,SMALL;
}
@Getter @Setter
@Extension(vendorName="datanucleus",key="enum-check-constraint",value="true")
private HelloWorldTypeEnum type = HelloWorldTypeEnum.BIG;
...
public QHelloWorldobject(PersistableExpression parent,String name,int depth)
{
super(parent,name);
if (depth > 0)
{
this.type = new EnumExpressionImpl(this,"type",depth-1);
}
else
{
this.type = null;
}
this.name = new StringExpressionImpl(this,"name");
this.notes = new StringExpressionImpl(this,"notes");
}
...
线
this.type = new EnumExpressionImpl(this,depth-1);
有错误:
- The constructor EnumExpressionImpl(QHelloWorldobject,String,int) is undefined
- EnumExpressionImpl is a raw type. References to generic type EnumExpressionImpl<T> should be parameterized
我创建了干净的项目,去掉了所有 ISIS 的东西,并将其减少到只有 2 个 java 文件,使用 OpenJDK 11 使用 datanucleus 5.2.8 和 6.0.0-m1 进行测试。结果总是相同的。
我使用的是带有 OpenJDK 11 的 Opensuse 15.2 机器。
根据 https://www.datanucleus.org/products/accessplatform/jdo/mapping.html 支持枚举。
有人知道出了什么问题吗?
解决方法
事实证明就这么简单:不要让枚举持久化。
删除该行:
@javax.jdo.annotations.PersistenceCapable(identityType = IdentityType.DATASTORE,schema = "hello" )
来自枚举定义。