@Transactional public void delete(Long id) { * User user = (User) session.get(User.class, id); * session.delete(user); } Kemungkinan besar memang sudah di-delete waktu pertama kali. Waktu kedua method session.get() menghasilkan null. Coba ganti seperti ini:
@Transactional public void delete(Long id) { * User user = (User) session.get(User.class, id);* * if(user == null) {* * System.out.println("data memang udah ga ada");* * } else {* * System.out.println("data dihapus id=" + id);* * session.delete(user);* * } * } On 5 March 2010 13:07, Mirza Akhena <mirken...@gmail.com> wrote: > > > Halo temen2 Juger sekalian.. > > Saat ini aku lagi belajar pake Hibernate dalam Spring dan aku udah buat > project Helloworld untuk mempelajarinya. > > aku pake MultiActionController pada Controllernya (UserController.java) > pake Annotation pada class Modelnya (User.java) > > Tapi pas aku mau klik link delete (pada userPage.jsp), kok gak berhasil > yah? > > klik (link "Hapus") utk pertama kali gak ada respon apa2 (harusnya udah > hilang datanya), > tapi pas klik dua kali malah muncul error : > > *java.lang.IllegalArgumentException: attempt to create delete event with null > entity* > > pas di cek di MySQL, datanya masih utuh, belum kehapus, > > > > Mohon bantuannya ya temen2, kira2 salahnya dimana ya? > > > > > > > ini aku lampirin kode helloworldnya : > > ==================================================== > *web.xml* > > <?xml version="1.0" encoding="UTF-8"?> > <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xmlns="http://java.sun.com/xml/ns/javaee" > xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" > xsi:schemaLocation="http://java.sun.com/xml/ns/javaee > http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" > id="WebApp_ID" version="2.5"> > > <display-name>simplespringhibernate</display-name> > <welcome-file-list> > <welcome-file>index.jsp</welcome-file> > </welcome-file-list> > > <servlet> > <servlet-name>simplespringhibernate</servlet-name> > > <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> > <load-on-startup>1</load-on-startup> > </servlet> > > <servlet-mapping> > <servlet-name>simplespringhibernate</servlet-name> > <url-pattern>*.htm</url-pattern> > </servlet-mapping> > > </web-app> > > > ==================================================== > *simplespringhibernate-servlet.xml* > > <?xml version="1.0" encoding="UTF-8"?> > <beans xmlns="http://www.springframework.org/schema/beans" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xmlns:tx="http://www.springframework.org/schema/tx" > xsi:schemaLocation="http://www.springframework.org/schema/beans > http://www.springframework.org/schema/beans/spring-beans-2.5.xsd > http://www.springframework.org/schema/tx > http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> > > <bean id="dataSource" > class="org.apache.tomcat.dbcp.dbcp.BasicDataSource"> > <property name="driverClassName" value="com.mysql.jdbc.Driver" /> > <property name="url" value="jdbc:mysql://localhost/simple" /> > <property name="username" value="root" /> > <property name="password" value="" /> > </bean> > > <bean id="sessionFactory" > > class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" > destroy-method="destroy"> > <property name="dataSource" ref="dataSource" /> > <property name="annotatedClasses"> > <list> > <value>com.simple.model.User</value> > </list> > </property> > <property name="hibernateProperties"> > <props> > <prop > key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> > <prop key="hibernate.show_sql">true</prop> > <prop key="hibernate.hbm2ddl.auto">update</prop> > </props> > </property> > </bean> > > <tx:annotation-driven /> > > <bean id="transactionManager" > > class="org.springframework.orm.hibernate3.HibernateTransactionManager"> > <property name="sessionFactory" ref="sessionFactory" /> > </bean> > > <bean id="internalResourceViewResolver" > > class="org.springframework.web.servlet.view.InternalResourceViewResolver"> > <property name="prefix" value="/WEB-INF/view/" /> > <property name="suffix" value=".jsp" /> > </bean> > > <bean name="/userPage/*.htm" > class="com.simple.controller.UserController"> > <constructor-arg ref="sessionFactory" /> > </bean> > > </beans> > > > ==================================================== > *User.java* > > package com.simple.model; > > import javax.persistence.Column; > import javax.persistence.Entity; > import javax.persistence.GeneratedValue; > import javax.persistence.GenerationType; > import javax.persistence.Id; > import javax.persistence.Table; > > @Entity > @Table(name = "USER") > public class User { > > @Id > @GeneratedValue(strategy = GenerationType.AUTO) > @Column(name = "ID") > private Long id; > > @Column(name = "NAME", length = 30, nullable = false) > private String name; > > @Column(name = "AGE", nullable = false) > private int age; > > public Long getId() { return id; } > > public void setId(Long id) { this.id = id; } > > public String getName() { return name; } > > public void setName(String name) { this.name = name; } > > public int getAge() { return age; } > > public void setAge(int age) { this.age = age; } > > } > > ==================================================== > *UserController.java* > > package com.simple.controller; > > import java.util.List; > > import javax.servlet.http.HttpServletRequest; > import javax.servlet.http.HttpServletResponse; > > import org.hibernate.Session; > import org.hibernate.SessionFactory; > import org.springframework.web.bind.ServletRequestUtils; > import org.springframework.web.servlet.ModelAndView; > import > org.springframework.web.servlet.mvc.multiaction.MultiActionController; > > import com.simple.model.User; > import com.simple.service.UserService; > > public class UserController extends MultiActionController { > > private UserService userService; > > public UserController(SessionFactory sessionFactory) { > Session session = sessionFactory.openSession(); > userService = new UserService(session); > } > > public ModelAndView add(HttpServletRequest request, HttpServletResponse > httpServletResponse, User user) throws Exception { > userService.store(user); > return new ModelAndView("redirect:list.htm"); > } > > public ModelAndView remove(HttpServletRequest request, > HttpServletResponse response) throws Exception { > Long id = ServletRequestUtils.getLongParameter(request, "id"); > userService.delete(id); > return new ModelAndView("redirect:list.htm"); > } > > public ModelAndView list(HttpServletRequest request, > HttpServletResponse httpServletResponse) throws Exception { > List<User> users = userService.getAll(); > return new ModelAndView("userPage", "users", users); > } > > } > > > ==================================================== > *UserService.java* > > package com.simple.service; > > import java.util.List; > > import org.hibernate.Session; > import org.springframework.transaction.annotation.Transactional; > > import com.simple.model.User; > > public class UserService { > > private Session session; > > public UserService(Session session) { > this.session = session; > } > > @Transactional > public void store(User user) { > session.saveOrUpdate(user); > } > > @Transactional > public void delete(Long id) { > User user = (User) session.get(User.class, id); > session.delete(user); > } > > @SuppressWarnings("unchecked") > @Transactional(readOnly = true) > public List<User> getAll() { > return session.createQuery("from User").list(); > } > } > > ==================================================== > *userPage.jsp* > > <%...@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> > > <html> > <head> > <title>List User</title> > </head> > <body> > > <form action="add.htm"> > <table border="1"> > <tr> > <td>Nama</td> > <td><input type="text" name="name" /></td> > </tr> > <tr> > <td>Umur</td> > <td><input type="text" name="age" /></td> > </tr> > </table> > <input type="submit" value="Daftar" /> > </form> > > <table border="1"> > <tr> > <th>Nama</th> > <th>Umur</th> > <th>Hapus</th> > </tr> > <c:forEach items="${users}" var="u"> > <tr> > <td>${u.name}</td> > <td>${u.age}</td> > <td><a href="/simplespringhibernate/userPage/remove.htm?id=${ > u.id}">Hapus</a></td> > </tr> > </c:forEach> > </table> > > </body> > </html> > > ==================================================== > *index.jsp* > > <%...@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> > > <c:redirect url="userPage/list.htm" /> > > > > > > ==================================================== > > -- > Best Regards > > Mirza Akhena > > > -- -o--o---( ^ ^ )---o--o- Speed Optimization: Seek and ye shall find! In case it isn't in the cache yet, too bad, you've to wait 40x longer. Daniel Baktiar (http://dbaktiar.wordpress.com)