我是 Spring 领域的新手,这次我正在研究如何将它与 Hibernate 集成以创建我的 DAO 对象,但我发现DELETE操作存在一些困难......
所以我有一个人表,我创建了这个实现我的 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());
}
}
}
在本课程结束时,我试图删除所有执行循环的表记录,该循环仅执行以下操作:
dao.delete(listaPersone.get(i).getPid());
但它不起作用,在我的表中所有记录仍然保持不变......
为什么?我的代码有什么问题?(我也不例外……)
这是我的 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;
}
}