I create a hibernate project with 'hibernate tools'provide by JBoss to Eclipse. Generated the Entities (POJO's) and then the DAO's.
This way for example:
@Entity @Table(name = "area", catalog = "project_schema", uniqueConstraints = @UniqueConstraint(columnNames = "area")) public class Area implements java.io.Serializable { private Integer id; private String area; public Area() { } public Area(String area) { this.area = area; } @Id @GeneratedValue(strategy = IDENTITY) @Column(name = "id", unique = true, nullable = false) public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } @Column(name = "area", unique = true, nullable = false, length = 45) public String getArea() { return this.area; } public void setArea(String area) { this.area = area; } } And then the respectely DAO class (generated by Hibernate Tools too):
@Stateless public class AreaHome { private static final Log log = LogFactory.getLog(AreaHome.class); @PersistenceContext private EntityManager entityManager; public void persist(Area transientInstance) { log.debug("persisting Area instance"); try { entityManager.persist(transientInstance); log.debug("persist successful"); } catch (RuntimeException re) { log.error("persist failed", re); throw re; } } public void remove(Area persistentInstance) { log.debug("removing Area instance"); try { entityManager.remove(persistentInstance); log.debug("remove successful"); } catch (RuntimeException re) { log.error("remove failed", re); throw re; } } public Area merge(Area detachedInstance) { log.debug("merging Area instance"); try { Area result = entityManager.merge(detachedInstance); log.debug("merge successful"); return result; } catch (RuntimeException re) { log.error("merge failed", re); throw re; } } public Area findById(Integer id) { log.debug("getting Area instance with id: " + id); try { Area instance = entityManager.find(Area.class, id); log.debug("get successful"); return instance; } catch (RuntimeException re) { log.error("get failed", re); throw re; } } } But when I try to call AreaHome.persist() it launchs an exception 'NullPointerException'.
I configure my project with hibernate.cfg.xml and everything works fine though:
<?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"><password></property> <property name="hibernate.connection.url">jdbc:mysql://<hostname>:3306/<schema></property> <property name="hibernate.connection.username">root</property> <!-- <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> --> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- SQL --> <property name="hibernate.format_sql">true</property> <property name="hibernate.show_sql">true</property> <!-- C3P0 --> <property name="hibernate.c3p0.acquire_increment">2</property> <property name="hibernate.c3p0.max_size">20</property> <property name="hibernate.c3p0.min_size">5</property> <property name="hibernate.c3p0.timeout">180</property> <property name="hibernate.c3p0.idle_test_period">100</property> <!-- Classes --> <mapping class="com.suaparte.pojo.Area" /> </session-factory> </hibernate-configuration> This works fine when I try:
public void persist(Area area) throws ExceptionHandler { Session session = HibernateUtil.getSessionFactory().openSession(); try { session.beginTransaction(); session.save(area); session.getTransaction().commit(); } catch (HibernateException he) { session.getTransaction().rollback(); throw new ExceptionHandler(he.getCause()); } finally { if (session != null) { session.close(); } } } But I want to use the DAO's generated by Hibernate Tools because they have EntityManager (which is supposed to be injected, but isn't apparentely).
What I have to do ? Any idea ? Sorry by the long question, but I wanna to be very clear about my problem.