Reputation: 397
i've a web-app that insert and delete stuff from a db. This is my db, named "shine":
CREATE TABLE utente (
ID int NOT NULL AUTO_INCREMENT,
nome VARCHAR(255),
cognome VARCHAR(255),
username VARCHAR(255),
password VARCHAR(255),
PRIMARY KEY (ID)
);
CREATE TABLE sdplines (
ID int NOT NULL AUTO_INCREMENT,
value VARCHAR(255),
session_id VARCHAR(255),
u_id int,
PRIMARY KEY (ID),
FOREIGN KEY (u_id) REFERENCES utente(ID)
);
These are my entities:
In SDPLines.java
package entities;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name = "sdplines", catalog = "shine")
public class SDPLines implements java.io.Serializable {
@Id
@GeneratedValue
private int id;
@Column(name="value")
private String value;
@Column(name="session_id")
private String SessionId;
@ManyToOne
@JoinColumn(name="u_id")
private Utente utente;
public SDPLines() {
}
public SDPLines(String value) {
this.value=value;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public Utente getUtente() {
return utente;
}
public void setUtente(Utente utente) {
this.utente = utente;
}
public String getSessionId() {
return SessionId;
}
public void setSessionId(String sessionId) {
SessionId = sessionId;
}
In Utente.java
package entities;
import java.util.Set;
// Generated 17-mar-2016 19.34.01 by Hibernate Tools 3.4.0.CR1
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;
/**
* Utente generated by hbm2java
*/
@Entity
@Table(name = "utente", catalog = "shine")
public class Utente implements java.io.Serializable {
@Id
@GeneratedValue (strategy = GenerationType.AUTO)
@Column(name = "ID", unique = true, nullable = false)
private long id;
private String username;
private String nome;
private String cognome;
private String password;
@OneToMany(mappedBy="utente")
private Set<SDPLines> sdp;
public Utente() {
}
public Utente(String username) {
this.username = username;
}
public Utente(String username, String nome, String cognome, String password) {
this.username = username;
this.nome = nome;
this.cognome = cognome;
this.password = password;
}
@Column(name = "username", unique = true, nullable = false, length = 10)
public String getUsername() {
return this.username;
}
public void setUsername(String username) {
this.username = username;
}
@Column(name = "nome", length = 45)
public String getNome() {
return this.nome;
}
public void setNome(String nome) {
this.nome = nome;
}
@Column(name = "cognome", length = 45)
public String getCognome() {
return this.cognome;
}
public void setCognome(String cognome) {
this.cognome = cognome;
}
@Column(name = "password", length = 45)
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
@OneToMany(mappedBy="utente")
public Set<SDPLines> getSdp() {
return sdp;
}
public void setSdp(Set<SDPLines> sdp) {
this.sdp = sdp;
}
}
This is SDPLineModel.java, that manages entities:
package model;
import org.hibernate.Query;
import entities.SDPLines;
import entities.Utente;
public class SDPLineModel extends AbstractModel {
public SDPLineModel(){
super (Utente.class);
}
public SDPLines findFingerprint(String fingerprint, Long u_id){
try{
if(!sessionFactory.getCurrentSession().getTransaction().isActive())
sessionFactory.getCurrentSession().getTransaction().begin();
Query q= this.sessionFactory.getCurrentSession().createQuery("select fing from SDPLines fing where fing.value=:valore and fing.utente.id=:id");
q.setString("valore", fingerprint);
q.setLong("id",u_id);
System.out.println("eseguo la query. Valore nel DB: "+fingerprint);
System.out.println("Fingerprint relativa a id"+u_id);
return (SDPLines) q.uniqueResult();
}catch(Exception e){
e.printStackTrace();
return null;
}
}
public SDPLines loginUsername(String username){
try{
if(!sessionFactory.getCurrentSession().getTransaction().isActive())
sessionFactory.getCurrentSession().getTransaction().begin();
Query q= this.sessionFactory.getCurrentSession().createQuery("select ut from Utente ut where ut.username=:username");
q.setString("username", username);
System.out.println("eseguo la query. Valore nel DB: "+username);
return (SDPLines) q.uniqueResult();
}catch(Exception e){
e.printStackTrace();
return null;
}
}
public SDPLines findFingerprintNew(String fingerprint, Long user_id) {
try{
if(!sessionFactory.getCurrentSession().getTransaction().isActive())
sessionFactory.getCurrentSession().getTransaction().begin();
Query q= this.sessionFactory.getCurrentSession().createQuery("select fing from SDPLines fing where fing.value=:valore and fing.utente.id=:id");
q.setString("valore", fingerprint);
q.setLong("id",user_id);
System.out.println("eseguo la query:fingerprint= "+fingerprint);
System.out.println("Fingerprint relativa a id= "+user_id);
return (SDPLines) q.uniqueResult();
}catch(Exception e){
e.printStackTrace();
return null;
}
}
public SDPLines findFingerprintFinal(String fingerprint, String sessionid) {
try{
if(!sessionFactory.getCurrentSession().getTransaction().isActive())
sessionFactory.getCurrentSession().getTransaction().begin();
Query q= this.sessionFactory.getCurrentSession().createQuery("select fing from SDPLines fing where fing.value=:valore and fing.SessionId=:id");
q.setString("valore", fingerprint);
q.setString("id",sessionid);
System.out.println("eseguo la query:fingerprint= "+fingerprint);
System.out.println("Fingerprint relativa a id= "+sessionid);
return (SDPLines) q.uniqueResult();
}catch(Exception e){
e.printStackTrace();
return null;
}
}
public void deleteFingerprint(String fingerprint, String sessionid) {
try{
if(!sessionFactory.getCurrentSession().getTransaction().isActive())
sessionFactory.getCurrentSession().getTransaction().begin();
// Query q= this.sessionFactory.getCurrentSession().createQuery("delete fing from SDPLines fing where fing.value=:valore and fing.SessionId=:id");
Query q= this.sessionFactory.getCurrentSession().createQuery("delete SDPLines where value=:valore and SessionId=:id");
q.setString("valore", fingerprint);
q.setString("id",sessionid);
System.out.println("eseguo la query: DELETE fingerprint= "+fingerprint);
System.out.println("Fingerprint relativa a id= "+sessionid+" DELETED");
}catch(Exception e){
e.printStackTrace();
}
}
I've a servlet that switches between insert and delete a specific "sdplines" row based by "session_id" and "value" SDPLine values.
My problem is the following: this servlet works fine when i want to store into my mysql db a new sdplines row, when i put via browser its session_id and value. But, when i want to delete a sdplines row (always startinf from its session_id and value) servlet, using hibernate, doesn't delete it. I've simply substituted "select" to "delete" in my query.
This is the servlet:
package controller;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Set;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import entities.SDPLines;
import entities.Utente;
import model.HibernateUtil;
import model.SDPLineModel;
import model.UtenteModel;
/**
* Servlet implementation class AccountController
*/
@WebServlet("/AccountController")
public class AccountController extends HttpServlet {
private static final long serialVersionUID = 1L;
private UtenteModel um= new UtenteModel();
public AccountController() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String action= request.getParameter("action");
if(action==null){
request.getRequestDispatcher("menu.html").forward(request, response);
}else
{
if(action.equalsIgnoreCase("logout")){
HttpSession session= request.getSession();
session.removeAttribute("username");
response.sendRedirect("AccountController");
}
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String action= request.getParameter("action");
UtenteModel um= new UtenteModel();
SDPLineModel sdpmodel= new SDPLineModel();
if (action.equals("InsertSDPLine")) {
HttpSession session1= request.getSession();
// String username = (String) session1.getAttribute("username");
// String password = (String) session1.getAttribute("password");
// Utente ut= um.loginUsername(username);
Long user_id = (Long) session1.getAttribute("user_id");
// Utente ut = um.login(username, password);
Utente ut = um.loginByID(user_id);
Long u_id = ut.getId();
SessionFactory sf = HibernateUtil.createSessionFactory();
Session session = sf.openSession();
session.beginTransaction();
SDPLines sdp = new SDPLines(request.getParameter("sdpline"));
sdp.setSessionId(request.getParameter("sessionid"));
sdp.setUtente(ut);
session.save(sdp);
session.getTransaction().commit();
session.close();
String message = "INSERTED";
// response.addHeader("FINGERPRINT_VALIDITY", message);
System.out.println("sdpline: "+sdp+"inserita!");
response.getOutputStream().print(message);
response.getOutputStream().flush();
response.getOutputStream().close();
}
if (action.equals("CheckFingerprint")) {
// HttpSession session1= request.getSession();
// String username = (String) request.getParameter("username");
String fingerprint = (String) request.getParameter("fingerprint");
String sessionid = (String) request.getParameter("sessionid");
//String user_id = request.getParameter("user_id");
// HttpSession session1= request.getSession();
// Long user_id = (Long) session1.getAttribute("user_id");
// Utente ut = um.loginByID(user_id);
// Utente ut= um.loginUsername(username);
// Utente ut = um.login(username, password);
// Long u_id = ut.getId();
// SDPLines sdpline = sdpmodel.findFingerprint(fingerprint, user_id);
// SDPLines sdpline = sdpmodel.findFingerprintNew(fingerprint, user_id);
SDPLines sdpline = sdpmodel.findFingerprintFinal(fingerprint, sessionid);
if (sdpline == null) {
String message = "NOT_VALID";
// response.addHeader("FINGERPRINT_VALIDITY", message);
System.out.println("Fingerprint NON trovata! ");
response.getOutputStream().print(message);
response.getOutputStream().flush();
response.getOutputStream().close();
// request.getRequestDispatcher("AfterLogin.jsp").forward(request, response); // va nella pagina welcome
}
else {
String message = "VALID";
System.out.println("Fingerprint trovata! ");
response.getOutputStream().print(message);
response.getOutputStream().flush();
response.getOutputStream().close();
}
}
if (action.equals("DeleteFingerprint")) {
// HttpSession session1= request.getSession();
// String username = (String) request.getParameter("username");
String fingerprint = (String) request.getParameter("sdpline");
String sessionid = (String) request.getParameter("sessionid");
//String user_id = request.getParameter("user_id");
// HttpSession session1= request.getSession();
// Long user_id = (Long) session1.getAttribute("user_id");
// Utente ut = um.loginByID(user_id);
// Utente ut= um.loginUsername(username);
// Utente ut = um.login(username, password);
// Long u_id = ut.getId();
// SDPLines sdpline = sdpmodel.findFingerprint(fingerprint, user_id);
// SDPLines sdpline = sdpmodel.findFingerprintNew(fingerprint, user_id);
SDPLines sdpline = sdpmodel.findFingerprintFinal(fingerprint, sessionid);
if (sdpline == null) {
String message = "FINGEPRINT_NOT_PRESENT!";
// response.addHeader("FINGERPRINT_VALIDITY", message);
System.out.println("DELETE FINGEPRINT: FINGERPRINT NON PRESENTE! ");
response.getOutputStream().print(message);
response.getOutputStream().flush();
response.getOutputStream().close();
// request.getRequestDispatcher("AfterLogin.jsp").forward(request, response); // va nella pagina welcome
}
else {
sdpmodel.deleteFingerprint(fingerprint, sessionid);
String message = "DELETED";
System.out.println("Fingerprint rimossa! ");
response.getOutputStream().print(message);
response.getOutputStream().flush();
response.getOutputStream().close();
}
}
if(action.equals("loginUt")){
Utente ut= um.login(request.getParameter("username"), request.getParameter("password"));
if(ut==null){
request.setAttribute("message","Account Invalido");
request.getRequestDispatcher("loginUtente.jsp").forward(request, response); // rimane nella pagina della form
}else
{
HttpSession session= request.getSession();
session.setAttribute("username",request.getParameter("username"));
session.setAttribute("password",request.getParameter("password"));
session.setAttribute("user_id",ut.getId());
request.setAttribute("username",request.getParameter("username"));
// request.getRequestDispatcher("welcomeUtente.jsp").forward(request, response); // va nella pagina welcome
request.getRequestDispatcher("AfterLogin.jsp").forward(request, response); // va nella pagina welcome
}
}else
{
if(action.equals("registra")){
Utente ut= new Utente();
//prelevo valori dalla form e li scrivo nel DB
ut.setNome(request.getParameter("nome"));
ut.setCognome(request.getParameter("cognome"));
ut.setUsername(request.getParameter("username"));
ut.setPassword(request.getParameter("password"));
String password=request.getParameter("RepeatPassword");
//registrazione nuovo utente
this.um.create(ut);
request.getRequestDispatcher("loginUtente.jsp").forward(request, response);
}
}
}
}
This is hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password"></property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/shine</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="show_sql">true</property>
<mapping class="entities.SDPLines"/>
<mapping class="entities.Utente"/>
</session-factory>
</hibernate-configuration>
Upvotes: 1
Views: 65
Reputation: 26522
Well it seems that after you create the query.. you do not seem to run it.
Add the bulk update execution before returning from the method and remember to commit your transaction and close the session (unless you are performing more transactional operations after delete) afterwards:
Query q= this.sessionFactory.getCurrentSession()
.createQuery("delete SDPLines where value=:valore and SessionId=:id");
q.setString("valore", fingerprint);
q.setString("id",sessionid);
q.executeUpdate();
session.getTransaction().commit();
}catch(Exception e){
session.getTransaction.rollback();
}finally{
session.close();
}
Upvotes: 1