没有为EntityManager提供持久性提供程序,名为XXX Spring-jpa-hibernate-mysql-Maven项目

时间:2015-07-30 11:41:00

标签: java mysql spring hibernate jpa

您好我第一次开始使用Spring和JPA,我已经在堆栈溢出处尝试了许多教程和问题。但没有成功,所以我希望有人可以给我一个明确的方法来解决这个问题。我正在开发一个玩具应用程序,以便在我开始真正的项目之前对该技术充满信心,我在尽可能使用Java注释的Maven-non web模块项目中使用Java,Spring,Hibernate,JPA和MySQL。尽可能小的xml,我发现很多web基础应用程序都是xml文件但是无法理解如何纠正我的项目。我唯一能理解的是,我需要声明一个持久性单元以某种方式告诉实体管理器该做什么,但我的项目中没有META-INF文件夹(应该创建一个?)和大多数persistance.xml文件我我发现声明的东西比我在jpa-handler-conf.xml中的声明要多得多,否则它似乎运行正常。 所以这是项目组件:

豆子:

package hp.esercizi.beans;
imports omitted...

@Component
@Entity
@Table(name = "AUTORE")
public class Autore {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;
    @Column(name = "NOME", length = 20)
    private String nome;
    @Column(name = "COGNOME", length = 20)
    private String cognome;
    @OneToMany(targetEntity=Autore.class, mappedBy="amici")
    private List<Autore> amici;


    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public List<Autore> getAmici() {
        return amici;
    }
    public void setAmici(List<Autore> amici) {
        this.amici = amici;
    }
    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
    public String getCognome() {
        return cognome;
    }
    public void setCognome(String cognome) {
        this.cognome = cognome;
    }
}
package hp.esercizi.beans;
imports omitted... 

@Component
@Entity
@Table(name = "MESSAGGIO")
public class Messaggio {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;
    @Column(name = "TESTO", nullable = false, length = 200)
    private String testo;
    @ManyToOne 
    @JoinColumn(name="AUTORE_ID")
    private Autore autore;


    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getTesto() {
        return testo;
    }
    public void setTesto(String testo) {
        this.testo = testo;
    }
    public Autore getAutore() {
        return autore;
    }
    public void setAutore(Autore autore) {
        this.autore = autore;
    }
}

DAOs:

package hp.esercizi.dao;
imports omitted...

public interface AutoreDAO {

    public EntityManager getEntityManager();

    public void setEntityManager(EntityManager entityManager);

    public void insert(Autore autore);

    public List<Autore> selectAll();

    public Autore findAutoreByID(Long id);
}
package hp.esercizi.dao;
imports omitted... 

@Repository("AutoreDAO")
@Transactional
public class AutoreDAOJPA2Impl implements AutoreDAO {

    private static final String SELECT_QUERY = "select a from autore a";

    @PersistenceContext
    private EntityManager entityManager;

    public EntityManager getEntityManager() {

        return entityManager;
    }

    public void setEntityManager(EntityManager entityManager) {

        this.entityManager = entityManager;
    }

    public void insert(Autore autore) {

        entityManager.persist(autore);
    }

    public List<Autore> selectAll() {

        Query query = (Query) entityManager.createQuery(SELECT_QUERY);
        List<Autore> autori = (List<Autore>)  query.getResultList();
        return autori;
    }

    public Autore findAutoreByID(Long id) {

         return entityManager.find(Autore.class, id);
    }
}
package hp.esercizi.dao;
imports omitted... 

public interface MessaggioDAO {

    public EntityManager getEntityManager();

    public void setEntityManager(EntityManager entityManager);

    public void insert(Messaggio messaggio);

    public List<Messaggio> selectAll();

}

package hp.esercizi.dao;
imports omitted...

@Repository("MessaggioDAO")
@Transactional
public class MessaggioDAOJPA2Impl implements MessaggioDAO {

    private static final String SELECT_QUERY = "select m from messaggio m";

    @PersistenceContext
    private EntityManager entityManager;

    public EntityManager getEntityManager() {

        return entityManager;
    }

    public void setEntityManager(EntityManager entityManager) {

        this.entityManager = entityManager;
    }

    public void insert(Messaggio messaggio) {

        entityManager.persist(messaggio);
    }

    public List<Messaggio> selectAll() {

        Query query = (Query) entityManager.createQuery(SELECT_QUERY);
        List<Messaggio> messaggi = (List<Messaggio>)  query.getResultList();
        return messaggi;
    }
}

实体管理器和数据源配置XML(jpa-handler-conf.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:jpa="http://www.springframework.org/schema/data/jpa"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.8.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd">

    <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="jpaVendorAdapter" ref="vendorAdaptor" />
        <property name="packagesToScan" value="hp.esercizi" />
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.hbm2ddl.auto">create</prop>
            </props>
        </property>
    </bean>

    <bean id="abstractVendorAdaptor" abstract="true">
        <!-- <property name="generateDdl" value="${db.generate}" /> -->
        <property name="database" value="MYSQL" />
        <property name="showSql" value="true" />
    </bean>

    <bean id="vendorAdaptor"
        class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"
        parent="abstractVendorAdaptor">
    </bean>

    <bean id="entityManager"
        class="org.springframework.orm.jpa.support.SharedEntityManagerBean">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/DB_SpringContext" />
        <property name="username" value="root" />
        <property name="password" value="Lavoro01" />
    </bean>

    <bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <constructor-arg ref="entityManagerFactory" />
    </bean>

    <tx:annotation-driven transaction-manager="txManager" />

</beans>

上下文配置:

package hp.esercizi.utility;
imports omitted...

@ComponentScan("hp.esercizi.beans")
public class BeansConfig {
}


package hp.esercizi.utility;
imports omitted...

@Configuration
@ComponentScan("hp.esercizi.dao")
public class DataSourceConfig {

}


package hp.esercizi.utility;
imports omitted...

@Configuration
@Import({BeansConfig.class , DataSourceConfig.class})
@ImportResource("jpa-handler-conf.xml")
public class SpringConfig {
}

主要:

package hp.esercizi.main;
imports omitted... 

public class Main {

    public static void main(String[] args) {

        ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
        EntityManagerFactory emfactory = Persistence.createEntityManagerFactory("AutoreDAO");
        EntityManager entitymanager = emfactory.createEntityManager( );
        entitymanager.getTransaction( ).begin( );

        Messaggio msg = (Messaggio) context.getBean("messaggio");
        entitymanager.merge(msg);
        Autore aut = (Autore) context.getBean("autore");
        entitymanager.merge(aut);

        msg.setTesto("Ciao Mondo!!!");
        aut.setNome("Mario");
        aut.setCognome("Rossi");
        System.out.println(msg.getTesto());
        System.out.println(msg.getAutore().getNome() + " " + msg.getAutore().getCognome());

        entitymanager.persist(msg);
        entitymanager.getTransaction().commit();

        Messaggio msg2 = entitymanager.find(Messaggio.class, 1);

        ObjectMapper mapper = new ObjectMapper();
        try {

            System.out.println(mapper.writeValueAsString(msg2));

        } catch (JsonGenerationException e) {
            e.printStackTrace();
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        entitymanager.close( );
        emfactory.close( );
    }
}

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>esercizi</groupId>
  <artifactId>SpringContext</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <dependencies>
      <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.1.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.1.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.1.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>4.1.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>4.1.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>4.1.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>4.1.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jpa</artifactId>
            <version>2.0.8</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.9</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.0.0.CR2</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.0.0.CR2</version>
        </dependency>
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.8.5</version>
        </dependency>
    </dependencies>
</project>

0 个答案:

没有答案
相关问题