Why can't I insert data into MySQL database? - java

I try to insert those values on the persistence class
but I can't and I don't know why
I've tried a lot of things and wasted a lot of hours with any results:'(
I'm noob in JPA JSF
ENTITY CLASS
package testes;
import entity.Automovel;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
public class PersistidorDeAutomovel {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.
createEntityManagerFactory("default");
EntityManager em = JPAUtil.getEntityManager();
Automovel auto = new Automovel();
auto.setAnoFabricacao(2010);
auto.setModelo("Ferrari");
auto.setObservacoes("Nunca foi batido");
EntityTransaction tx = em.getTransaction();
tx.begin();
em.persist(auto);
tx.commit();
em.close();
emf.close();
}
}
JPAUtil CLASS
package testes;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class JPAUtil {
private static final EntityManagerFactory emf =
Persistence.createEntityManagerFactory("default");
public static EntityManager getEntityManager() {
return emf.createEntityManager();
}
}
PERSISTENCE TEST CLASS, JUST CREATED IT TO TEST IF I COULD INSERT DATA INTO THE DATABASE. I just don't understand why it isn't working
package testes;
import entity.Automovel;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
public class PersistidorDeAutomovel {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.
createEntityManagerFactory("default");
EntityManager em = JPAUtil.getEntityManager();
Automovel auto = new Automovel();
auto.setAnoFabricacao(2010);
auto.setModelo("Ferrari");
auto.setObservacoes("Nunca foi batido");
EntityTransaction tx = em.getTransaction();
tx.begin();
em.persist(auto);
tx.commit();
em.close();
emf.close();
}
}
PERSISTENCE CLASS CONFIGURATIONS
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="default" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>entity.Automovel</class>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/automovel?zeroDateTimeBehavior=convertToNull"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.password" value="1q2w3e4r"/>
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect" />
</properties>
</persistence-unit>
</persistence>

Related

h2 database persists data but resets on application start

I have a basic test for an embedded database that I'm trying to get working for a java project. As it stands now I am able to save rows to the database with my entity repository object, and after the app finishes running, I can connect to the database with intellij and see those rows are still there. But then, if I comment out the save methods and run it again, when I check the database after it finishes, the database is empty.
Entity
package closet.utilities.entities;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
#Entity
#Table(name = "outfits")
public class Outfit {
#Id
#Column(name = "id")
String id;
#Column(name = "inv_name")
String invName;
#Column(name = "display_name")
String displayName;
#Column(name = "owner")
String owner;
public Outfit() {
}
public Outfit(String id, String invName, String displayName, String owner) {
this.id = id;
this.invName = invName;
this.displayName = displayName;
this.owner = owner;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getInvName() {
return invName;
}
public void setInvName(String invName) {
this.invName = invName;
}
public String getDisplayName() {
return displayName;
}
public void setDisplayName(String displayName) {
this.displayName = displayName;
}
public String getOwner() {
return owner;
}
public void setOwner(String owner) {
this.owner = owner;
}
#Override
public String toString() {
return "Outfit{" +
"id='" + id + '\'' +
", invName='" + invName + '\'' +
", displayName='" + displayName + '\'' +
", owner='" + owner + '\'' +
'}';
}
}
Repository
package closet.utilities.repositories;
import closet.utilities.entities.Outfit;
import javax.persistence.EntityManager;
import java.util.List;
import java.util.Optional;
public class OutfitRepository {
private EntityManager entityManager;
public OutfitRepository(EntityManager entityManager) {
this.entityManager = entityManager;
}
public Optional<Outfit> findById(String id) {
Outfit outfit = entityManager.find(Outfit.class, id);
return outfit != null ? Optional.of(outfit) : Optional.empty();
}
public List<Outfit> findAll() {
return entityManager.createQuery("from Outfit").getResultList();
}
public Optional<Outfit> save(Outfit outfit) {
try {
entityManager.getTransaction().begin();
entityManager.persist(outfit);
entityManager.getTransaction().commit();
return Optional.of(outfit);
} catch (Exception e) {
// TODO logging
e.printStackTrace();
}
return Optional.empty();
}
}
main method
package closet.utilities;
import closet.utilities.entities.Outfit;
import closet.utilities.repositories.OutfitRepository;
import org.hibernate.Session;
import org.hibernate.Transaction;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import java.util.List;
public class Runnable {
public static void main(String[] args) {
// Create our entity manager
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("closet");
EntityManager entityManager = entityManagerFactory.createEntityManager();
Outfit outfit = new Outfit("Ramesh", "Fadatare", "rameshfadatare#javaguides.com", "");
Outfit outfit1 = new Outfit("John", "Cena", "john#javaguides.com", "");
OutfitRepository outfitRepository = new OutfitRepository(entityManager);
//outfitRepository.save(outfit);
//outfitRepository.save(outfit1);
List<Outfit> outfits = outfitRepository.findAll();
for (Outfit o : outfits) {
System.out.println(o.getInvName());
}
}
}
persistence.xml
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="closet" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>closet.utilities.entities.Outfit</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:h2:./data/closet" />
<property name="javax.persistence.jdbc.user" value="sa" />
<property name="javax.persistence.jdbc.password" value="" />
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
<property name="show_sql" value="true"/>
<property name="hibernate.temp.use_jdbc_metadata_defaults" value="false"/>
</properties>
</persistence-unit>
</persistence>
hibernate.cfg.xml
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- JDBC Database connection settings -->
<property name="connection.driver_class">org.h2.Driver</property>
<property name="connection.url">jdbc:h2:./data/closet</property>
<property name="connection.username">sa</property>
<property name="connection.password"></property>
<!-- JDBC connection pool settings ... using built-in test pool -->
<property name="connection.pool_size">1</property>
<!-- Select our SQL dialect -->
<property name="dialect">org.hibernate.dialect.H2Dialect</property>
<!-- Echo the SQL to stdout -->
<property name="show_sql">true</property>
<!-- Set the current session context -->
<property name="current_session_context_class">thread</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">create-drop</property>
<!-- dbcp connection pool configuration -->
<property name="hibernate.dbcp.initialSize">5</property>
<property name="hibernate.dbcp.maxTotal">20</property>
<property name="hibernate.dbcp.maxIdle">10</property>
<property name="hibernate.dbcp.minIdle">5</property>
<property name="hibernate.dbcp.maxWaitMillis">-1</property>
<mapping class="closet.utilities.entities.Outfit" />
</session-factory>
</hibernate-configuration>
I'm just following this tutorial here as a guide to just figure out how to get it all working. I can't see what I'm doing wrong based on that.
You use:
<property name="hbm2ddl.auto">create-drop</property>
As it is stated in the documentation:
create-drop
Drop the schema and recreate it on SessionFactory startup. Additionally, drop the schema on SessionFactory shutdown.
So, this is expected behaviour.

Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named lanceurApplication

I am trying to setup persistence using JPA and Hibernate for a Java project. I use the Oracle 11g express for my database.
I've been on this for hours now, but no matter what I do I always get this exception when I try to create a EntityManagerFactory: I've found quite a few similar questions regarding this exception, but no solutions that I am able to get to work. What am I doing wrong here?
In detail:
The error I am getting is this:
Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named lanceurApplication
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:69)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)
at ap.s.tn.test.Main.main(Main.java:15)
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="lanceurApplication">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>ap.s.tn.beans.Adresse</class>
<properties>
<property name="hibernate.hbm2ddl.auto" value="create"/>
<property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver"/>
<property name="hibernate.connection.url" value="jdbc:oracle:thin:#localhost:1521:xe"/>
<property name="hibernate.connection.username" value="appACTEL"/>
<property name="hibernate.connection.password" value="appACTEL"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
</properties>
</persistence-unit>
</persistence>
Main.java
package ap.s.tn.test;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class Main {
/**
* #param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
EntityManagerFactory emf = Persistence.createEntityManagerFactory("lanceurApplication");
EntityManager entityManager = emf.createEntityManager();
}
}
Adresse.java
package ap.s.tn.beans;
import java.io.Serializable;
import java.lang.String;
import javax.persistence.*;
/**
* Entity implementation class for Entity: Adresse
*
*/
#Entity
public class Adresse implements Serializable {
private int id_adresse;
private String rue;
private String ville;
private String pays;
private static final long serialVersionUID = 1L;
public Adresse() {
super();
}
#Id
#GeneratedValue(strategy=GenerationType.AUTO)
public int getId_adresse() {
return this.id_adresse;
}
public void setId_adresse(int id_adresse) {
this.id_adresse = id_adresse;
}
public String getRue() {
return this.rue;
}
public void setRue(String rue) {
this.rue = rue;
}
public String getVille() {
return this.ville;
}
public void setVille(String ville) {
this.ville = ville;
}
public String getPays() {
return this.pays;
}
public void setPays(String pays) {
this.pays = pays;
}
}
1-delete all your library jar
2-add them again Properties -> Java Build Path -> Add JARs
3-Project -> Clean
4-modification with spring3
Adresse.java:
package com.springJPA.domain;
import java.io.Serializable;
import java.lang.String;
import javax.persistence.*;
/**
* Entity implementation class for Entity: Adresse
*
*/
#Entity
public class Adresse implements Serializable {
private int id_adresse;
private String rue;
private String ville;
private String pays;
private static final long serialVersionUID = 1L;
public Adresse() {
super();
}
#Id
#GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "id_Sequence_adresse")
#SequenceGenerator(name = "id_Sequence_adresse", sequenceName = "ID_SEQ_ADRESSE")
public int getId_adresse() {
return this.id_adresse;
}
public void setId_adresse(int id_adresse) {
this.id_adresse = id_adresse;
}
public String getRue() {
return this.rue;
}
public void setRue(String rue) {
this.rue = rue;
}
public String getVille() {
return this.ville;
}
public void setVille(String ville) {
this.ville = ville;
}
public String getPays() {
return this.pays;
}
public void setPays(String pays) {
this.pays = pays;
}
}
Main.java:
package com.springJPA.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.springJPA.domain.Adresse;
import com.springJPA.domain.Utilisateur;
import com.springJPA.service.AdresseService;
public class Main {
/**
* #param args
*/
public static void main(String[] args) {
Utilisateur utilisateur = new Utilisateur();
//--------
Adresse adresse = new Adresse();
adresse.setRue("kantawi");
adresse.setVille("Sousse");
adresse.setPays("Tunisie");
//--------
ApplicationContext context = new ClassPathXmlApplicationContext("application-context.xml");
AdresseService adrService = (AdresseService) context.getBean("adrService");
adrService.ajoutAdresse(adresse);
}
}
MyEntityManagerFactory.java:
package com.springJPA.util;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.springframework.stereotype.Component;
#Component("myEMF")
public class MyEntityManagerFactory {
private EntityManager entityManager;
private String unitName = "SpringJPA";
public EntityManager getEntityManager() {
if(entityManager == null){
EntityManagerFactory emf = Persistence.createEntityManagerFactory(unitName);
entityManager = emf.createEntityManager();
}
return entityManager;
}
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
public String getUnitName() {
return unitName;
}
public void setUnitName(String unitName) {
this.unitName = unitName;
}
}
TransactionAspect.java:
package com.springJPA.util;
public class TransactionAspect {
private MyEntityManagerFactory entityManagerFactory;
public void begin(){
entityManagerFactory.getEntityManager().getTransaction().begin();
}
public void commit(){
entityManagerFactory.getEntityManager().getTransaction().commit();
}
public MyEntityManagerFactory getEntityManagerFactory() {
return entityManagerFactory;
}
public void setEntityManagerFactory(MyEntityManagerFactory entityManagerFactory) {
this.entityManagerFactory = entityManagerFactory;
}
}
application-context.xml:
<?xml version="1.0" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<context:annotation-config/>
<context:component-scan base-package="com.springJPA.service"/>
<context:component-scan base-package="com.springJPA.util"/>
<bean id="tr" class="com.springJPA.util.TransactionAspect">
<property name="entityManagerFactory" ref="myEMF"/>
</bean>
<aop:config>
<aop:pointcut expression="execution(* com.springJPA.service.AdresseService.*(..))" id="adrPC"/>
<aop:pointcut expression="execution(* com.springJPA.service.UtilisateurService.*(..))" id="utlPC"/>
<aop:aspect ref="tr">
<aop:before pointcut-ref="adrPC" method="begin"></aop:before>
<aop:after pointcut-ref="adrPC" method="commit"></aop:after>
<aop:before pointcut-ref="utlPC" method="begin"></aop:before>
<aop:after pointcut-ref="utlPC" method="commit"></aop:after>
</aop:aspect>
</aop:config>
</beans>
persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="SpringJPA" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.springJPA.domain.Adresse</class>
<class>com.springJPA.domain.Utilisateur</class>
<properties>
<property name="hibernate.archive.autodetection" value="class" />
<property name="hibernate.dialect" value="com.mysema.query.jpa.support.ExtendedOracleDialect" />
<property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver" />
<property name="hibernate.connection.url" value="jdbc:oracle:thin:#localhost:1521:xe" />
<property name="hibernate.connection.username" value="appACTEL" />
<property name="hibernate.connection.password" value="appACTEL" />
<property name="hibernate.flushMode" value="FLUSH_AUTO" />
<property name="hibernate.hbm2ddl.auto" value="create" />
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
</properties>
</persistence-unit>
</persistence>

Creation of the database tables with Hibernate

people!
I made a small project using Servlets / JBoss / Hibernate / Mysql.
I put Hibernate to generate tables automatically. My question is only that: When these table are generated? Tables should be created when I rise the JBoss or when I call the servlet in the browser?
Because I realized that they are created only when I call one of my Servlets, and I imagined they would be created when I rise the JBoss.
Sorry if it's silly.
Here is my Class:
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
#Entity
#Table(name="estacoes")
public class Estacao {
#Id
#GeneratedValue
private int id;
private String nome;
private String endereco;
private String temperatura;
private String energia;
private String porta;
private String sinal;
private String bateria;
...getters/setters...
My persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="arduinoserver">
<!-- provedor/implementacao do JPA -->
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<non-jta-data-source>java:jboss/datasources/MysqlDS</non-jta-data-source>
<!-- entidade mapaeada -->
<class>arduinoserver.beans.Estacao</class>
<properties>
<!-- propriedades do hibernate -->
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.connection.charSet" value="UTF-8" />
</properties>
</persistence-unit>
And my DAO:
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import arduinoserver.beans.Estacao;
public class EstacaoDAO {
protected EntityManager entityManager;
public EstacaoDAO() {
entityManager = getEntityManager();
}
private EntityManager getEntityManager() {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("arduinoserver");
if(entityManager == null) {
entityManager = factory.createEntityManager();
}
return entityManager;
}
public Estacao getById(final int id) {
return entityManager.find(Estacao.class, id);
}
#SuppressWarnings("unchecked")
public List<Estacao> findAll() {
return entityManager.createQuery("FROM estacoes").getResultList();
}
public void persist(Estacao estacao) {
try {
entityManager.getTransaction().begin();
// entityManager.persist(estacao);
entityManager.merge(estacao);
entityManager.getTransaction().commit();
} catch(Exception ex) {
ex.printStackTrace();
entityManager.getTransaction().rollback();
}
}
}
As far as I know Hibernate creates the tables when the SessionFactory is created. The application server doesn't automatically create one on its own, therefor the tables are usually not created on the server start.

ClassNotFoundException: javax.persistence.Persistence - Hibernate

I'm getting this error:
java.lang.ClassNotFoundException: javax.persistence.Persistence
This is my project:
persistence.xml
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="Forum">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>Model.Section</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/Forum" />
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="root" />
</properties>
</persistence-unit>
</persistence>
NewSectionController.java
package Controller;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import Model.Section;
public class NewSectionController extends HttpServlet {
private static final long serialVersionUID = 1L;
public NewSectionController() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
RequestDispatcher rs = request.getRequestDispatcher("newSection.jsp");
rs.forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String title = request.getParameter("titulo");
String description = request.getParameter("descricao");
Section section = new Section();
section.insertNewSection(title, description);
}
}
Section.java
package Model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Persistence;
#Entity
public class Section {
#Id
#GeneratedValue
int idSection;
#Column
String titleSection;
#Column
String descriptionSection;
public void insertNewSection(String title, String description) {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("Forum");
EntityManager em = factory.createEntityManager();
Section section = new Section();
section.setTitleSection(title);
section.setDescriptionSection(description);
em.getTransaction().begin();
em.persist(section);
em.getTransaction().commit();
}
public int getIdSection() {
return idSection;
}
public void setIdSection(int idSection) {
this.idSection = idSection;
}
public String getTitleSection() {
return titleSection;
}
public void setTitleSection(String titleSection) {
this.titleSection = titleSection;
}
public String getDescriptionSection() {
return descriptionSection;
}
public void setDescriptionSection(String descriptionSection) {
this.descriptionSection = descriptionSection;
}
}
The files are organized this way:
src/Controller/NewSectionController.java
src/Model/Section.java
src/META-INF/persistence.xml
resources/log4j.properties
lib/
WebContent/
And I have imported and add to build path all these libs:
antlr-2.7.7.jar
c3p0-0.9.1.jar
dom4j-1.6.1.jar
ehcache-core-2.4.3.jar
hibernate-c3p0-4.2.2.Final.jar
hibernate-commons-annotations-4.0.2.Final.jar
hibernate-core-4.2.2.Final.jar
hibernate-ehcache-4.2.2.Final.jar
hibernate-entitymanager-4.2.2.Final.jar
hibernate-envers-4.2.2.Final.jar
hibernate-infinispan-4.2.2.Final-tests.jar
hibernate-infinispan-4.2.2.Final.jar
hibernate-jpa-2.0-api-1.0.1.Final.jar
hibernate-proxool-4.2.2.Final.jar
infinispan-core-5.2.0.Beta3.jar
javassist-3.15.0-GA.jar
jboss-logging-3.1.0.GA.jar
jboss-logging-3.1.1.GA.jar
jboss-marshalling-1.3.15.GA.jar
jboss-marshalling-river-1.3.15.GA.jar
jboss-transaction-api_1.1_spec-1.0.1.Final.jar
jgroups-3.2.0.CR1.jar
proxool-0.8.3.jar
rhq-pluginAnnotations-3.0.4.jar
slf4j-api-1.6.1.jar
stax2-api-3.1.1.jar
staxmapper-1.1.0.Final.jar
woodstox-core-asl-4.1.1.jar
And I'm still getting the java.lang.ClassNotFoundException: javax.persistence.Persistence error.
What should I do?

Product creation doesn't work (under Spring MVC with JPA)

Well, the code is working under the Test Enviroment, but not on the front context of the application. This is driving me crazy to be honest.
Here is the controller:
package org.admios.nuevoproyecto.controller;
import java.util.List;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.validation.BindingResult;
import org.admios.nuevoproyecto.dao.ProductDAO;
import org.admios.nuevoproyecto.model.Product;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.apache.log4j.Logger;
import org.springframework.web.bind.annotation.PathVariable;
import static java.lang.System.out;
#Controller
#RequestMapping("/product")
public class ProductController {
private static Logger logger = Logger.getLogger(ProductController.class);
#Autowired
ProductDAO pdi;
#InitBinder
public void setAllowedFields(WebDataBinder dataBinder) {
dataBinder.setDisallowedFields("id");
}
#RequestMapping(value="/list")
public void listAllProducts() {
List<Product> products = pdi.getProducts();
for (Product product : products) {
System.out.println("Title: " + product.getTitle());
System.out.println("Description: " + product.getDescription());
System.out.println("Price: " + product.getPrice());
System.out.println("--------");
}
}
#RequestMapping(value="/add", method=RequestMethod.POST)
public String addProduct(#ModelAttribute Product product, BindingResult result) {
logger.info("Entrando en el metodo para agregar nuevo producto");
// Product newProduct = new Product();
// newProduct.setTitle("Titulo del producto2s");
// newProduct.setDescription("Descripcion del producto");
// newProduct.setPrice(220f);
System.out.println(product.getPrice());
Product savedProduct = pdi.saveProduct(product);
System.out.println(savedProduct.getId());
return "hello";
}
#RequestMapping(value="/form")
public String viewForm() {
out.println("entering viewForm()");
return "addproduct";
}
#RequestMapping(value="/view/{id}", method=RequestMethod.GET)
public void viewProduct(#PathVariable("id") Long id) {
System.out.println(id);
}
#ModelAttribute("product")
public Product getProductObject() {
out.println("entering getProductObject()");
return new Product();
}
}
The DAO implementation:
package org.admios.nuevoproyecto.dao;
import java.util.List;
import javax.persistence.EntityManagerFactory;
import org.admios.nuevoproyecto.model.Product;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.jpa.support.JpaDaoSupport;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
#Repository
public class ProductDaoImp extends JpaDaoSupport implements ProductDAO {
private static Logger log = Logger.getLogger(ProductDaoImp.class);
#Autowired
public ProductDaoImp(EntityManagerFactory entityManagerFactory) {
super.setEntityManagerFactory(entityManagerFactory);
}
#Override
public List<Product> getProducts() {
return getJpaTemplate().find("select p from Product p");
}
#Override
#Transactional(propagation = Propagation.REQUIRED, readOnly = false)
public Product saveProduct(Product product) {
log.info("Trying to create a new product");
Product newProduct = getJpaTemplate().merge(product);
log.info(newProduct.getDescription());
log.info(newProduct.getTitle());
log.info(newProduct.getId());
log.info(newProduct.getPrice());
return newProduct;
}
#Override
public void removeProduct(Product product) {
getJpaTemplate().remove(product);
}
#Override
public Product getProductById(Integer id) {
return getJpaTemplate().find(Product.class, id);
}
}
The applicationContext looks like this:
http://pastie.org/1175350
1.Create transaction manager as follow :
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" >
<property name="persistenceUnitName" value="persistanceUnit"/>
<property name="dataSource" ref="dataSource"/>
<property name="persistenceXmlLocation" value="classpath:persistence.xml"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="${db.orm.showsql}" />
<property name="generateDdl" value="${db.orm.generateDdl}" />
<property name="database" value="${db.type}"/>
<property name="databasePlatform" value="${db.orm.dialect}" />
</bean>
</property>
<property name="jpaProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">create</prop>
</props>
</property>
</bean>
2.use persistance.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="persistanceUnit" transaction-type="RESOURCE_LOCAL">
<description>Oracle db Persistence Unit</description>
<class>com.company.YourModelClass</class>
<properties/>
</persistence-unit>
</persistence>
3.Add following annotation in applicationContext.xml
<context:component-scan base-package="com.yourcompany.basepackage" />
4.annoatate your Entitymanager in service class like:
#PersistenceContext
private EntityManager em = null;
5.Inject TrasnsactionManager to :
private PlatformTransactionManager platformTransactionManager = null;
6.persist object like:
platformTransactionManager .persist(obj);
Have you tried with getJpaTemplate().persist(Object)?

Categories