2017-04-18 2 views
0

Ich habe mit einer HQL-Abfrage zu kämpfen. Ich habe eine benutzerdefinierte jsp, die einige Datensätze aus der Datenbank nach bestimmten Kriterien anzeigt. Mein Versuch ist, eine bestimmte Anzahl von Zeilen, die in einem benutzerdefinierten JSP angezeigt werden, aus der Datenbank zu markieren. Ich kann die Datensätze markieren und ihre Zeilen-IDs richtig lesen (ich habe das getestet). Daher versuche ich, die markierten Zeilen mit HQL im benutzerdefinierten Servlet zu löschen, aber die Datensätze werden nicht gelöscht. Ich bin mir nicht sicher, ob eine zusätzliche Konfiguration für die Persistenzdatei erforderlich ist. Jeder Beitrag über HQL DELETE oder UPDATE in einem Servlet ist mein Code für das Servlet willkommen ist, wie untenHQL löschen funktioniert nicht in einem Java-Servlet

package net.billing.deleterecords; 

import java.io.*; 
import javax.persistence.*; 
import javax.servlet.*; 
import javax.servlet.annotation.*; 
import javax.servlet.http.*; 
import org.openxava.jpa.*; 

@WebServlet("/deleteDiaryServlet") 
public class deleteDiaryServlet extends HttpServlet{ 

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException{ 

     String[] marked_records = request.getParameterValues("marked_record"); 

     PrintWriter out = response.getWriter(); 
     response.setContentType("text/html"); 
     out.print("<html><body>"); 
     out.print("The deleted records are: "); 
     out.print("<ul>"); 
     for(String selected:marked_records){ 
      out.print("<li>" + selected + "</li>"); 
       out.print("<li>" + selected+ "</li>"); 
      String oid = "8a4b301f5b142791015b142c13c50002"; 
      Query query = XPersistence.getManager() 
         .createQuery("delete from Diary diary where diary.oid=:oid"); 
       query.setParameter("oid",oid); 
       int count= query.executeUpdate(); 
       System.out.println("Rpws affected"+count); 
     } 

     out.print("</ul>"); 
     out.print("</body></html>"); 

    } 
} 
+0

Sie arbeiten mit einer festen oid! 'String oid =" 8a4b301f5b142791015b142c13c50002 ";' – Jens

+0

Sie sollten etwas über Software-Architektur lernen. Verwenden Sie nicht die Persistenzschicht direkt in der Ansicht – Jens

+0

Danke Jens für Beratung Ich habe gerade String oid = "8a4b301f5b142791015b142c13c50002"; für den Fall des Testens nur, wenn das Löschen funktionieren würde. Ich bekomme den Wert von einem anderen JSP zum Servlet – Frank

Antwort

0

Sie benötigen, um Ihre Transaktion zu begehen. Versuchen Sie hinzufügen

nach Ihrer for-Schleife, so dass alle Transaktionen löschen werden zusammen begangen werden.

+0

Vielen Dank XPersistence.commit() löste mein Problem Vielen Dank – Frank

+0

froh, dass es geholfen hat, markieren Sie einfach Ihre Frage als antwortete dann ... :) –

+0

Lassen Sie mich wie weise tun – Frank