gpt4 book ai didi

java - Spring + hibernate : I can't delete a record from a table

转载 作者:搜寻专家 更新时间:2023-11-01 03:08:17 26 4
gpt4 key购买 nike

我是 Spring 领域的新手,这段时间我正在研究如何将它与 Hibernate 集成以创建我的 DAO 对象,但我发现 DELETE 操作有些困难......

所以我有一个 person 表,我创建了这个实现我的 DAO 对象的具体类:

package org.andrea.myexample.HibernateOnSpring.dao;

import java.util.List;

import org.andrea.myexample.HibernateOnSpring.entity.Person;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.transaction.annotation.Transactional;

public class PersonDAOImpl implements PersonDAO {

private SessionFactory sessionFactory;

public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}

// Metodo che inserisce un nuovo record nella tabella person
@Transactional(readOnly = false)
public void addPerson(Person p) {
Session session = sessionFactory.openSession();
session.save(p);
session.close();
}

/*
* Metodo che recupera un record, rappresentante una persona, avente uno
* specifico id dalla tabella.
*
* @param L'id univoco della persona
*/

public Person getById(int id) {
Session session = sessionFactory.openSession();
try {
return (Person) session.get(Person.class, id);
} finally {
session.close();
}
}

/*
* Metodo che recupera la lista di tutti le persone rappresentanti dalle
* righe della tabella person
*/
@SuppressWarnings("unchecked")
public List<Person> getPersonsList() {

Session session = sessionFactory.openSession();
try {

Criteria criteria = session.createCriteria(Person.class);
return criteria.list();

} finally {
session.close();
}

}

/*
* Metodo che elimina dalla tabella person la riga avente uno specifico id
*
* @param l'id della persona da eliminare dalla tabella person
*/
public void delete(int id) {

Session session = sessionFactory.openSession();
try {
Person personToDelete = getById(id);
session.delete(personToDelete);

} finally {
session.close();
}

}

}

然后我创建了一个主类来测试我的 DAO 是如何工作的我可以毫无问题地将新对象插入表中,获取表中的单个对象或所有对象的列表,但我发现从表中删除对象时出现问题。

这是我的测试类:

package org.andrea.myexample.HibernateOnSpring;

import java.util.List;

import org.andrea.myexample.HibernateOnSpring.dao.PersonDAO;
import org.andrea.myexample.HibernateOnSpring.dao.PersonDAOImpl;
import org.andrea.myexample.HibernateOnSpring.entity.Person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {

public static void main( String[] args ){

ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
System.out.println("Contesto recuperato: " + context);

Person persona1 = new Person();

persona1.setFirstname("Pippo");
persona1.setLastname("Blabla");
//persona1.setPid(1);

System.out.println("Creato persona1: " + persona1);

PersonDAO dao = (PersonDAO) context.getBean("personDAOImpl");

System.out.println("Creato dao object: " + dao);

dao.addPerson(persona1);

System.out.println("persona1 salvata nel database");

Person personaEstratta = dao.getById(persona1.getPid());

System.out.println("Persona con id: " + personaEstratta.getPid() + " estratta dal DB");
System.out.println("Dati persona estratta:");
System.out.println("Nome: " + personaEstratta.getFirstname());
System.out.println("Cognome: " + personaEstratta.getLastname());

System.out.println("");

// STAMPA LA LISTA DELLE PERSONE NELLA TABELL person:
List<Person> listaPersone = dao.getPersonsList();
System.out.println("Lista delle persone recuperata: " + listaPersone );

// MOSTRA I DATI DI TUTTE LE PERSONE NELLA LISTA:
for(int i=0; i<listaPersone.size(); i++){
Person currentPerson = listaPersone.get(i);
System.out.println("id: " + currentPerson.getPid()
+ " nome: " + currentPerson.getFirstname()
+ " cognome: " + currentPerson.getLastname());
}

// ELIMINAZIONE DI UNA PERSONA DALLA TABELLA person:
System.out.println("");
System.out.println("ELIMINAZIONE DI UNA PERSONA DALLA TABELLA person:");


// ELIMINA TUTTI I RECORD DALLA TABELLA persone:
for(int i=0; i<listaPersone.size(); i++){
dao.delete(listaPersone.get(i).getPid());
System.out.println("Persona con id: " + i + " eliminata");
}

listaPersone = dao.getPersonsList(); // Lista vuota

// MOSTRA I DATI DI TUTTE LE PERSONE NELLA LISTA:
for(int i=0; i<listaPersone.size(); i++){
Person currentPerson = listaPersone.get(i);
System.out.println("id: " + currentPerson.getPid()
+ " nome: " + currentPerson.getFirstname()
+ " cognome: " + currentPerson.getLastname());
}

}
}

在本类(class)结束时,我试图删除所有执行循环的表记录,该循环仅执行以下操作:

dao.delete(listaPersone.get(i).getPid());

但它不起作用,在我的表中所有记录仍然保持不变......

为什么?我的代码有什么问题? (我也不异常(exception)……)

这是我的 Person 类代码:

package org.andrea.myexample.HibernateOnSpring.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="person")
public class Person {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int pid;

private String firstname;

private String lastname;

public int getPid() {
return pid;
}

public void setPid(int pid) {
this.pid = pid;
}

public String getFirstname() {
return firstname;
}

public void setFirstname(String firstname) {
this.firstname = firstname;
}

public String getLastname() {
return lastname;
}

public void setLastname(String lastname) {
this.lastname = lastname;
}
}

最佳答案

我已经解决了这个问题:

@Override
public void deleteData(int id) {
log.info("delete by id = "+id);
Transaction tx=null;

//open a session and begin the transaction with the database
Session session = null;


try {
session = getSession();
tx = session.beginTransaction();
Person person = getPerson(id);
session.delete(person);
tx.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {

if (!tx.wasCommitted()) {
tx.rollback();
}//not much doing but a good practice
session.flush(); //this is where I think things will start working.
session.close();
}
}

关于java - Spring + hibernate : I can't delete a record from a table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15044603/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com