一对多关系在java google ap引擎中引发错误? [英] one to many relationship in java google ap engine caused error ?

查看:116
本文介绍了一对多关系在java google ap引擎中引发错误?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经实现了一个系统来保存关于用户的信息。
所以我在我的班级聚合,所以用户类有联系人类的列表...等等
在第一页测试它只是为了注册用户只是通过电话号码,必须保存用户在数据库中,但是当我将我的项目部署到Google应用引擎时,这会导致错误< 500服务器错误>



另一页用于更新之前已经注册过的存在用户,因此在此将添加到列表中用户对象有。



用户类

  public class User实现Serializable {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
私钥键;

@Persistent
public String userNumber;

@Persistent(mappedBy =userC)
public List< Contact> UserContacts = new ArrayList< Contact>();

public void AddContact(String name,String number){
Contact C = new Contact();
C.ContactName = name;
C.PhoneNumber = number;
this.UserContacts.add(C); }
}

联系人类别

  @PersistenceCapable 
public class Contact实现Serializable {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
私钥键;

@Persistent
public String ContactName;

@Persistent
public String PhoneNumber;
@Persistent
public User userC; }

此页面会导致注册用户测试将获得用户电话号码并注册应该使用此编号创建新用户
测试页

  @SuppressWarnings( serial)

public class Test extends HttpServlet {

  public void doGet(HttpServletRequest req,HttpServletResponse resp)
throws IOException {
resp.setContentType(text / html);
resp.getWriter()。println(< html>< body>< form method = \POST \action = \/ signup \>+请输入ur number:+< h4>< label> name:< input name = \userphoneNUMBER \type = \text \size = \25 \/><< ; / label>+< p>< input type = \submit\value = \Submit \/>+< / form>< / body>< / HTML>中);



数字创建用户

  @SuppressWarnings(serial)
public class Signup extends HttpServlet {
public void doPost(HttpServletRequest req,HttpServletResponse resp)
抛出IOException {
resp.setContentType(text / plain);
字符串user_PhoneNumber = req.getParameter(userphoneNUMBER);
User obj = new User();
obj.userNumber = user_PhoneNumber;
resp.getWriter()。println(obj.userNumber);
PersistenceManager pm = PMF.get()。getPersistenceManager();

尝试{
pm.makePersistent(obj);
} finally {
pm.close();

}}}

更新已存在用户对象的值

  @SuppressWarnings(serial)
公共类Testinfo扩展HttpServlet {
public void doGet(HttpServletRequest req,HttpServletResponse resp)
抛出IOException {
resp.setContentType(text / html);
resp.getWriter()。println(< html>< body>< form method = \POST \action = \/ saveinfo \>+ $ b $ < / h2>< / br>+
< h4>< label>< h2>联系人名称:< input name = \联系人名称\type = \text \size = \25 \/>< / label>
+
< p>< input type = \submit \value = \Submit \/>+
< / form>< / body>< / html>);
}

}

此页面用于保存导致错误的信息,并且不会在app引擎中保存值

  @SuppressWarnings ( 串行)
公共类SaveInfo延伸的HttpServlet {
公共无效的doPost(HttpServletRequest的REQ,HttpServletResponse的RESP)
抛出IOException异常{
resp.setContentType( text / plain的) ;

String ContactName = req.getParameter(ContactName);
String ContactNumber = req.getParameter(ContactNumber);
PersistenceManager pm = PMF.get()。getPersistenceManager();
Query query = pm.newQuery(select from+ User.class.getName());
列表<用户> list =(List< User>)query.execute();
for(User obj:list){


if(obj.userNumber.equals(111)){
pm.currentTransaction()。begin );
obj.AddContact(ContactName,ContactNumber);

pm.makePersistent(obj);

pm.currentTransaction()。commit(); }
}
pm.close(); }}

这个 111 用于测试我之前输入的用户电话号码。

那么我该如何处理列表和聚合问题呢?

在更新用户信息时发生此错误

 从servlet的
javax.jdo.JDOUserException未捕获的例外:标识符在 * 预期在字符1处org.datanucleus.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:375)
在org.datanucleus.jdo.JDOQuery.execute(JDOQuery.java:230)
在sstooree.SaveInfo.doPost(SaveInfo.java:44)
在javax.servlet.http.HttpServlet.service(HttpServlet的的.java:637)在javax.servlet.http.HttpServlet.service
(HttpServlet.java:717)在org.mortbay.jetty.servlet.ServletHolder.handle
(ServletHolder.java:511)
。在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1166)
在com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:102)
at org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.runti me.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35)维持在com.google.apphosting org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)

。 utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)


解决方案

查询中的问题



改变了这个

 查询query = pm.newQuery(select from+ User.class.getName()); 

  Query query = pm.newQuery(select * from+ User.class.getName()); 

您并未选择任何列。这会导致sql语法错误


i have implement a system to save information about user . So i have aggregation at my class so the user class has list from contact class ...etc in the first page "test it's just for register the user just by phone number " that must save the user in database but this cause error when i deploye my project in Google app engine < 500 server error >

and the other page for update the exist user who previously has been registered, so at this will add to the list which the user object has .

user class

@PersistenceCapable
public class User implements Serializable{
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;

 @Persistent
public String userNumber;

 @Persistent (mappedBy = "userC")
 public List<Contact> UserContacts =new  ArrayList<Contact>();

 public void AddContact(String name,String number) {
     Contact C=new Contact();
     C.ContactName=name;
     C.PhoneNumber=number;
     this.UserContacts.add(C);   }
     }

Contact class

    @PersistenceCapable
public class Contact implements Serializable{
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;

     @Persistent
        public String ContactName;

     @Persistent
    public String PhoneNumber;  
             @Persistent
    public User userC; }

this page cause register for the user test will get user phone number and sign up should create new user with this number test page

@SuppressWarnings("serial")

public class Test extends HttpServlet {

public void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws IOException {
        resp.setContentType("text/html");
        resp.getWriter().println("<html><body><form  method = \"POST\"     action=\"/signup\">" + "please enter ur number :"+"<h4><label>name :  <input name =  \"userphoneNUMBER\" type =  \"text \" size =  \"25 \" />  </label>"+"<p> <input type = \"submit\" value = \"Submit\" />"+ "</form></body></html>");

    }
}

this page take the number to create user

@SuppressWarnings("serial")
public class SignUP extends HttpServlet {
    public void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
        resp.setContentType("text/plain");
        String user_PhoneNumber=req.getParameter("userphoneNUMBER");
        User obj = new User();
    obj.userNumber=user_PhoneNumber;
    resp.getWriter().println(obj.userNumber );
        PersistenceManager pm = PMF.get().getPersistenceManager();

        try {
            pm.makePersistent(obj);
        } finally {
            pm.close();

        } }  }

this page to continue update value at user object who already exist

    @SuppressWarnings("serial")
public class Testinfo extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
        resp.setContentType("text/html");
        resp.getWriter().println("<html><body><form  method = \"POST\" action=\"/saveinfo\">" +
                "<center> <h2>please fill this form :</h2> </br> "+
"<h4><label> ContactName :  <input name =  \"ContactName\" type =  \"text \" size =  \"25 \" />  </label>"
+
"<p> <input type = \"submit\" value = \"Submit\" />"+
                "</form></body></html>");
    }

}

this page to save the information which cause error and no value will save at app engine

    @SuppressWarnings("serial")
public class SaveInfo extends HttpServlet {
    public void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
        resp.setContentType("text/plain");

        String ContactName = req.getParameter("ContactName");
        String ContactNumber = req.getParameter("ContactNumber");
                   PersistenceManager pm = PMF.get().getPersistenceManager();
        Query query = pm.newQuery("select from " + User.class.getName());
        List<User> list = (List<User>) query.execute();
        for (User obj : list) {


            if (obj.userNumber.equals("111")) {
                 pm.currentTransaction().begin();
                                     obj.AddContact(ContactName, ContactNumber);

                pm.makePersistent(obj);

                 pm.currentTransaction().commit(); }
            }
                          pm.close(); }  }

this 111 for testing which i entered before as user phone number .

So how can i deal with lists and aggregation issues ??

when going to update the user information this error occurred

Uncaught exception from servlet
javax.jdo.JDOUserException: Identifier expected at character 1 in "*" at         org.datanucleus.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:375)
at org.datanucleus.jdo.JDOQuery.execute(JDOQuery.java:230)
at sstooree.SaveInfo.doPost(SaveInfo.java:44)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:102)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)

解决方案

the problem in the query

change this

Query query = pm.newQuery("select from " + User.class.getName());

to

Query query = pm.newQuery("select * from " + User.class.getName());

you are not selecting any column . which cause a sql syntax error

这篇关于一对多关系在java google ap引擎中引发错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆