Java DataNucleus:“;IllegalArgumentException:无枚举常量--如何修复
我使用的是一个继承的MySQL dB模式,我无法更改。我正在尝试将DataNucleus(JDO)用于它 我在模式中有以下内容: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
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
...