Java DataNucleus:“;IllegalArgumentException:无枚举常量--如何修复

Java DataNucleus:“;IllegalArgumentException:无枚举常量--如何修复,java,enums,jdo,datanucleus,Java,Enums,Jdo,Datanucleus,我使用的是一个继承的MySQL dB模式,我无法更改。我正在尝试将DataNucleus(JDO)用于它 我在模式中有以下内容: CREATE TABLE `vendors` ( `vendor_id` INT(11) NOT NULL AUTO_INCREMENT, ... `registration_method` ENUM('Company','Basic Upgrade','Website','Secure Admin','Unknown') NULL DEFAU

我使用的是一个继承的MySQL dB模式,我无法更改。我正在尝试将DataNucleus(JDO)用于它

我在模式中有以下内容:

CREATE TABLE `vendors` (
    `vendor_id` INT(11) NOT NULL AUTO_INCREMENT,
    ...
    `registration_method` ENUM('Company','Basic Upgrade','Website','Secure Admin','Unknown') NULL DEFAULT NULL,
    ...
    PRIMARY KEY (`vendor_id`),
    ...
我定义了一个POJO来处理它:

@PersistenceCapable( table="vendors" )
public class VendorRec {
        ...
    public static enum registration_method_enum {
        Company( "Company" ), Basic_Upgrade( "Basic Upgrade" ), Website( "Website" ), Secure_Admin( "Secure Admin" ), Unknown( "Unknown" );
        private String registration_method;
        registration_method_enum( String registration_method ) {
            this.registration_method = registration_method;
        }
        public String getRegistration_method() {
            return this.registration_method;
        }
    };
        ...
    @PrimaryKey
    private Integer vendor_id;
        ...
    private registration_method_enum registration_method;
        ...
我正在使用DataNucleus的JDO接口检索此类:

Set<Integer> vendorIds = new HashSet();
        ...
Query q = persistenceManager.newQuery( VendorRec.class );
q.declareParameters( "java.util.Set vendorIds" );
q.setFilter( "vendorIds.contains( vendor_id )" );
q.setOrdering("vendor_fname ascending, vendor_lname ascending");
final Iterator<VendorRec> vendorIt = ( ( List<VendorRec> )q.execute( vendorIds ) ).iterator();
嗯,哼!当然,这里没有枚举常量“registration\u method\u enum.Secure Admin”!空间是不允许的!但这是我继承的dB定义…:-(

解决此问题的建议?是否有其他定义枚举的方法


非常感谢。

按照惯例,枚举类名应该是驼峰式的,如下所示:
RegistrationMethodEnum
。我不确定如何解决您的问题--可能需要创建和注册客户类型转换器--类似这样的问题:
java.lang.IllegalArgumentException: No enum constant ca.vendorlink.app.schema.VendorRec.registration_method_enum.Secure Admin
        ...