Datanucleus 5.2.x 6.0.0-m1 JDO Enum 用法,生成的代码未编译

问题描述

我正在尝试将 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;
}

并在 HelloWorldobject 中添加以下成员:

    @Getter @Setter
    @Extension(vendorName="datanucleus",key="enum-check-constraint",value="true")
    private HelloWorldTypeEnum type = HelloWorldTypeEnum.BIG;

生成的 QHelloWorldobject 无法编译:

...
    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" )

来自枚举定义。