Java 标识符用户名未解析(不是静态字段)<;有时>;

Java 标识符用户名未解析(不是静态字段)<;有时>;,java,google-app-engine,persistence,jdo,Java,Google App Engine,Persistence,Jdo,我正在使用JDO使对象持久化。我已经运行代码很多次了。有时,我会让事情持续下去,没有任何错误。有时,我会收到以下错误 1. org.datanucleus.exceptions.NucleusUserException 2. javax.jdo.JDOUserException 我不明白为什么它有时成功运行,有时失败。这些都是随机发生的。 我的应用程序正在注册期间验证新用户。这是我的密码 java(被持久化的实体) 主servlet: //Getting SignUp form v

我正在使用JDO使对象持久化。我已经运行代码很多次了。有时,我会让事情持续下去,没有任何错误。有时,我会收到以下错误

 1. org.datanucleus.exceptions.NucleusUserException
 2. javax.jdo.JDOUserException
我不明白为什么它有时成功运行,有时失败。这些都是随机发生的。 我的应用程序正在注册期间验证新用户。这是我的密码

java(被持久化的实体)

主servlet:

    //Getting SignUp form values
    String name=req.getParameter("name1");
    String uname=req.getParameter("uname1");
    String pswd=req.getParameter("pswd1");
    String age=req.getParameter("age");
    String city=req.getParameter("city");
    String bike=req.getParameter("bike");

            //PeristenceManager instance
            PersistenceManager pm = PMF.get().getPersistenceManager();

            //Creating instance for persistent entity class
     User newEntry=new User(name,uname,pswd,age,city,bike);

            //Query to match the userName entered in form and that of the dataStore user
    Query q = pm.newQuery(User.class);
    q.setFilter("userName == userNameParam");
    q.declareParameters("String userNameParam");
            try{
      List<User> results = (List<User>) q.execute(uname);
      if (!results.isEmpty()) {
                //if userName is found in DataStore
            resp.sendRedirect("invalidUser.html");  
      } else{
             //If userName is not found in dataStore
          pm.makePersistent(newEntry);          
          resp.sendRedirect("success.html");
          return;
      }
     }
    finally{

        System.out.println("Finally!");
    }
//获取注册表单值
字符串名称=req.getParameter(“name1”);
字符串uname=req.getParameter(“uname1”);
字符串pswd=req.getParameter(“pswd1”);
字符串年龄=请求的getParameter(“年龄”);
字符串city=req.getParameter(“city”);
字符串bike=req.getParameter(“bike”);
//PeristenceManager实例
PersistenceManager pm=PMF.get().getPersistenceManager();
//为持久实体类创建实例
User newEntry=新用户(姓名、uname、pswd、年龄、城市、自行车);
//查询以匹配表单中输入的用户名和数据存储用户的用户名
Query q=pm.newQuery(User.class);
q、 setFilter(“userName==userNameParam”);
q、 declareParameters(“字符串userNameParam”);
试一试{
列表结果=(列表)q.execute(uname);
如果(!results.isEmpty()){
//如果在数据存储中找到用户名
响应sendRedirect(“invalidUser.html”);
}否则{
//如果在数据存储中找不到用户名
pm.makePersistent(newEntry);
分别发送重定向(“success.html”);
返回;
}
}
最后{
System.out.println(“最终!”);
}

我在保存UserSession对象时也遇到了同样的错误,因为JDO无法存储除字符串、文本和其他数字类型之外的非基本数据类型以进行增强,使用objectify,我们可以为非基本对象提供键,并可以保存相同的对象,或者我们必须将该对象转换为字符串,在我的示例中,使用json将映射转换为Sring

Jul 08, 2017 11:50:41 AM org.datanucleus.enhancer.DataNucleusEnhancer main
SEVERE: DataNucleus Enhancer completed with an error. Please review the enhancer log for full details. Some classes may have been enhanced but some caused errors
Class "net.giffy.domain.UserSession" field "map" has been defined as a Map but the key type is not specified!
org.datanucleus.metadata.InvalidMemberMetaDataException: Class "net.giffy.domain.UserSession" field "map" has been defined as a Map but the key type is not specified!
    at org.datanucleus.metadata.MapMetaData.populate(MapMetaData.java:136)
    at org.datanucleus.metadata.AbstractMemberMetaData.populate(AbstractMemberMetaData.java:949)
    at org.datanucleus.metadata.ClassMetaData.populateMemberMetaData(ClassMetaData.java:543)
    at org.datanucleus.metadata.ClassMetaData.populate(ClassMetaData.java:215)
    at org.datanucleus.metadata.MetaDataManager$1.run(MetaDataManager.java:2699)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.datanucleus.metadata.MetaDataManager.populateAbstractClassMetaData(MetaDataManager.java:2693)
    at org.datanucleus.metadata.MetaDataManager.populateFileMetaData(MetaDataManager.java:2516)
    at org.datanucleus.metadata.MetaDataManager.initialiseFileMetaDataForUse(MetaDataManager.java:1123)
    at org.datanucleus.metadata.MetaDataManager.loadClasses(MetaDataManager.java:543)
    at org.datanucleus.enhancer.DataNucleusEnhancer.getFileMetadataForInput(DataNucleusEnhancer.java:734)
    at org.datanucleus.enhancer.DataNucleusEnhancer.enhance(DataNucleusEnhancer.java:525)
    at org.datanucleus.enhancer.DataNucleusEnhancer.main(DataNucleusEnhancer.java:1258)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.google.appengine.tools.enhancer.Enhancer.execute(Enhancer.java:74)
    at com.google.appengine.tools.enhancer.Enhance.<init>(Enhance.java:71)
    at com.google.appengine.tools.enhancer.Enhance.main(Enhance.java:51)
2017年7月8日上午11:50:41 org.datanucleus.enhancer.DataNucleusEnhancer main
严重:DataNucleus增强器已完成,但出现错误。请查看增强程序日志以了解完整详细信息。某些类可能已增强,但某些类会导致错误
类“net.giffy.domain.UserSession”字段“map”已定义为映射,但未指定密钥类型!
org.datanucleus.metadata.InvalidMemberMetaDataException:类“net.giffy.domain.UserSession”字段“map”已定义为映射,但未指定密钥类型!
位于org.datanucleus.metadata.MapMetaData.populate(MapMetaData.java:136)
位于org.datanucleus.metadata.AbstractMemberMetaData.populate(AbstractMemberMetaData.java:949)
位于org.datanucleus.metadata.ClassMetaData.populateMemberMetaData(ClassMetaData.java:543)
位于org.datanucleus.metadata.ClassMetaData.populate(ClassMetaData.java:215)
位于org.datanucleus.metadata.MetaDataManager$1.run(MetaDataManager.java:2699)
位于java.security.AccessController.doPrivileged(本机方法)
位于org.datanucleus.metadata.MetaDataManager.populateAbstractClassMetaData(MetaDataManager.java:2693)
位于org.datanucleus.metadata.MetaDataManager.populateFileMetaData(MetaDataManager.java:2516)
位于org.datanucleus.metadata.MetaDataManager.initialiseFileMetaDataForUse(MetaDataManager.java:1123)
位于org.datanucleus.metadata.MetaDataManager.loadClasses(MetaDataManager.java:543)
位于org.datanucleus.enhancer.DataNucleusEnhancer.getFileMetadataForInput(DataNucleusEnhancer.java:734)
位于org.datanucleus.enhancer.DataNucleusEnhancer.enhancer(DataNucleusEnhancer.java:525)
位于org.datanucleus.enhancer.DataNucleusEnhancer.main(DataNucleusEnhancer.java:1258)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:498)
位于com.google.appengine.tools.enhancer.enhancer.execute(enhancer.java:74)
位于com.google.appengine.tools.enhancer.Enhance.(Enhance.java:71)
位于com.google.appengine.tools.enhancer.Enhance.main(Enhance.java:51)

在您的情况下,请确保用户类每次都得到适当的增强,并建议您将用户类字段单独声明为持久字段。

我也面临同样的问题。有人知道答案吗?我也面临着同样的问题。异常消息:标识符userEmail未解析(非静态字段)W 2015-04-22 00:28:46.398 org.datanucleus.api.jdo.NucleusJDOHelper.getjdoExceptionForNucleuseException(NucleusJDOHelper.java:519)W 2015-04-22 00:28:46.398 org.datanucleus.api.jdo.jdoqquery.executeWithArray(JDOQuery.java:321)我仍然面临这个问题:异常消息:标识符userEmail未解析(不是静态字段)W 2015-8-25 03:27:51.660。org.datanucleus.api.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(Nucl‌​eusJDOHelper.java:519)W 2015-8-25 03:27:51.660。如果您将两个答案合并为一个,可能会有所帮助。
Jul 08, 2017 11:50:41 AM org.datanucleus.enhancer.DataNucleusEnhancer main
SEVERE: DataNucleus Enhancer completed with an error. Please review the enhancer log for full details. Some classes may have been enhanced but some caused errors
Class "net.giffy.domain.UserSession" field "map" has been defined as a Map but the key type is not specified!
org.datanucleus.metadata.InvalidMemberMetaDataException: Class "net.giffy.domain.UserSession" field "map" has been defined as a Map but the key type is not specified!
    at org.datanucleus.metadata.MapMetaData.populate(MapMetaData.java:136)
    at org.datanucleus.metadata.AbstractMemberMetaData.populate(AbstractMemberMetaData.java:949)
    at org.datanucleus.metadata.ClassMetaData.populateMemberMetaData(ClassMetaData.java:543)
    at org.datanucleus.metadata.ClassMetaData.populate(ClassMetaData.java:215)
    at org.datanucleus.metadata.MetaDataManager$1.run(MetaDataManager.java:2699)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.datanucleus.metadata.MetaDataManager.populateAbstractClassMetaData(MetaDataManager.java:2693)
    at org.datanucleus.metadata.MetaDataManager.populateFileMetaData(MetaDataManager.java:2516)
    at org.datanucleus.metadata.MetaDataManager.initialiseFileMetaDataForUse(MetaDataManager.java:1123)
    at org.datanucleus.metadata.MetaDataManager.loadClasses(MetaDataManager.java:543)
    at org.datanucleus.enhancer.DataNucleusEnhancer.getFileMetadataForInput(DataNucleusEnhancer.java:734)
    at org.datanucleus.enhancer.DataNucleusEnhancer.enhance(DataNucleusEnhancer.java:525)
    at org.datanucleus.enhancer.DataNucleusEnhancer.main(DataNucleusEnhancer.java:1258)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.google.appengine.tools.enhancer.Enhancer.execute(Enhancer.java:74)
    at com.google.appengine.tools.enhancer.Enhance.<init>(Enhance.java:71)
    at com.google.appengine.tools.enhancer.Enhance.main(Enhance.java:51)