relacja jeden do wielu w silniku Google google ap spowodowała błąd?
Mam zaimplementowany system do zapisywania informacji o użytkowniku. Mam więc agregację w mojej klasie, więc klasa użytkowników ma listę z klasy kontaktów ... itd. Na pierwszej stronie „testuj to tylko dla zarejestrowania użytkownika tylko przez numer telefonu”, który musi zapisać użytkownika w bazie danych, ale powoduje to błąd, gdy wdrożyć mój projekt w silniku aplikacji Google <500 błędów serwera>
a druga strona do aktualizacji istniejącego użytkownika, który wcześniej został zarejestrowany, więc w tym momencie doda się do listy, którą ma obiekt użytkownika.
klasa użytkownika
@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); }
}
Klasa kontaktowa
@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; }
rejestr tej strony powoduje, że test użytkownika otrzyma numer telefonu użytkownika, a rejestracja powinna utworzyć nowego użytkownika z tym numeremstrona testowa
@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>");
}
}
ta strona przyjmuje numer do utworzenia użytkownika
@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();
} } }
ta strona, aby kontynuować aktualizację wartości w obiekcie użytkownika, który już istnieje
@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>");
}
}
ta strona, aby zapisać informacje, które powodują błąd i żadna wartość nie zapisze w silniku aplikacji
@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(); } }
to111 do testowania, które wcześniej wprowadziłem jako numer telefonu użytkownika.
Jak więc radzić sobie z listami i problemami z agregacją?
podczas aktualizacji informacji o użytkowniku ten błąd wystąpił
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)