使用java配置在SpringMVC4WebApplication中的webserver(wildfly)上运行时,jpa命名和条件查询失败

使用java配置在SpringMVC4WebApplication中的webserver(wildfly)上运行时,jpa命名和条件查询失败,java,spring,hibernate,spring-mvc,jpa,Java,Spring,Hibernate,Spring Mvc,Jpa,我有以下使用java配置的简单SpringMVC4应用程序和JPA2.0 package com.somecompany.class; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; impor

我有以下使用java配置的简单SpringMVC4应用程序和JPA2.0

package com.somecompany.class;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;

@Configuration
@EnableWebMvc
@Import({JPAConfig.class, BeanConfig.class})
@ComponentScan("com.*")
public class AppConfig {

public InternalResourceViewResolver setupInternalResourceViewResolver() {

    InternalResourceViewResolver resolver = new InternalResourceViewResolver();
    resolver.setPrefix("/WEB-INF/views/");
    resolver.setSuffix(".jsp");
    resolver.setViewClass(JstlView.class);
    return resolver;
}

}
AppConfig.java类包含应用程序配置逻辑

package com.somecompany.class;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver;
import org.springframework.instrument.classloading.LoadTimeWeaver;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages="com.somecompany.model.*")
public class JPAConfig {

@Bean
public JpaTransactionManager jpaTransactionManager() {

    JpaTransactionManager transactionManager = new JpaTransactionManager(getEntityManagerFactoryBean().getObject());
    return transactionManager;
}

@Bean
public LocalContainerEntityManagerFactoryBean getEntityManagerFactoryBean() {
    LocalContainerEntityManagerFactoryBean containerEntityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
    containerEntityManagerFactoryBean.setDataSource(getDataSource());
    containerEntityManagerFactoryBean.setPersistenceUnitName("pmd-web");
    LoadTimeWeaver loadTimeWeaver = new InstrumentationLoadTimeWeaver();
    containerEntityManagerFactoryBean.setLoadTimeWeaver(loadTimeWeaver);
    return containerEntityManagerFactoryBean;
}

@Bean
public DataSource getDataSource() {
    BasicDataSource dataSource = new BasicDataSource();
    dataSource.setDriverClassName("com.mysql.jdbc.Driver");
    dataSource.setUrl("jdbc:mysql://localhost:3306/somedatabase");
    dataSource.setUsername("someuser");
    dataSource.setPassword("somepassword");
    return dataSource;
}

}
java包含JPA配置的详细信息

package com.somecompany.class;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration.Dynamic; 

import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;

public class WebAppInitializer implements WebApplicationInitializer{

public void onStartup(ServletContext servletContext) throws ServletException {

    AnnotationConfigWebApplicationContext webApplicationContext = new AnnotationConfigWebApplicationContext();
    webApplicationContext.register(AppConfig.class);
    webApplicationContext.setServletContext(servletContext);
    webApplicationContext.refresh();
    Dynamic dynamic = servletContext.addServlet("dispatcher", new DispatcherServlet(webApplicationContext));
    dynamic.addMapping("/");
    dynamic.setLoadOnStartup(1);
}

}
WebAppInitializer.java包含初始化web应用的逻辑

<?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="pmd-web">
    <description>project metrics dashboard</description>
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
    </properties>
    </persistence-unit>
</persistence> 
服务级别如上所述

package com.somecompany.loginService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import somecompany.VO.LoginVO;
import somecompany.mapper.LoginMapper;
import somecompany.model.PmdUser;
import com.somecompany.LoginDAO;

@Service
public class LoginService {

@Autowired
LoginDAO loginDAO;

@Autowired
LoginMapper loginMapper;

@Transactional
public LoginVO authenticateUser(LoginVO loginVO) {

    PmdUser pmdUser = loginMapper.getpmdUserFromLoginVO(loginVO);
    LoginVO loginVOFromDB = loginDAO.authenticateUser(pmdUser);

    if (loginVO.getUserName().equalsIgnoreCase(loginVOFromDB.getUserName())) {
        loginVO.setStatus(true);
    }
    return loginVO;
}

}
package com.somecompany.loginDAO;

import java.util.List;

import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.somecompany.VO.LoginVO;
import com.somecompany.baseDAO.BaseDao;
import com.somecompany.mapper.LoginMapper;
import com.somecompany.model.PmdUser;
package com.somecompany.baseDAO;

import java.lang.reflect.ParameterizedType;
import java.util.List;
import java.util.Map;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceException;
import javax.persistence.Query;
import org.springframework.transaction.annotation.Transactional;

import org.springframework.beans.factory.annotation.Autowired;


import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.ProjectionList;
import org.hibernate.criterion.Projections;

import org.springframework.stereotype.Repository;


@Repository
public abstract class BaseDao<E, K> {

/** The entity manager. */
@PersistenceContext(unitName = "pmd-web")
protected EntityManager entityManager;

/**
 * Gets the entity manager.
 *
 * @return the entity manager
 */
public EntityManager getEntityManager() {
    return entityManager;
}

/** The entity class. */
protected Class<E> entityClass;

/**
 * Instantiates a new base DAO.
 */
@SuppressWarnings("unchecked")
public BaseDao() {
    ParameterizedType genericSuperclass = (ParameterizedType) getClass().getGenericSuperclass();
    this.entityClass = (Class<E>) genericSuperclass.getActualTypeArguments()[0];
}

public List<E> findByNamedQuery(final String name, Object... params) {
    javax.persistence.Query query = getEntityManager().createNamedQuery(name);

    for (int i = 0; i < params.length; i++) {
        query.setParameter(i + 1, params[i]);
    }

    final List<E> result = (List<E>) query.getResultList();
    return result;
}
}
@存储库 公共类LoginDAO扩展了BaseDao{

@Autowired
LoginMapper loginMapper;


public LoginVO authenticateUser(PmdUser pmdUser) {

    PmdUser user = null;
    LoginVO loginVO = null;
    List<PmdUser> pmdUsers = findByNamedQuery("findByUsername", pmdUser.getUserName());
    if (pmdUsers.size() > 0) {
        user = pmdUsers.get(0);
        loginVO = loginMapper.getLoginVOFromPmdUser(user);
    }
    return loginVO;
}
}
@Autowired
LoginMapper LoginMapper;
public LoginVO authenticateUser(PmdUser PmdUser){
PmdUser=null;
LoginVO LoginVO=null;
列出pmdUsers=findByNamedQuery(“findByUsername”,pmdUser.getUserName());
如果(pmdUsers.size()>0){
user=pmdUsers.get(0);
loginVO=loginMapper.GetLoginVofRompdUser(用户);
}
返回loginVO;
}
}
java类如上所述

package com.somecompany.loginService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import somecompany.VO.LoginVO;
import somecompany.mapper.LoginMapper;
import somecompany.model.PmdUser;
import com.somecompany.LoginDAO;

@Service
public class LoginService {

@Autowired
LoginDAO loginDAO;

@Autowired
LoginMapper loginMapper;

@Transactional
public LoginVO authenticateUser(LoginVO loginVO) {

    PmdUser pmdUser = loginMapper.getpmdUserFromLoginVO(loginVO);
    LoginVO loginVOFromDB = loginDAO.authenticateUser(pmdUser);

    if (loginVO.getUserName().equalsIgnoreCase(loginVOFromDB.getUserName())) {
        loginVO.setStatus(true);
    }
    return loginVO;
}

}
package com.somecompany.loginDAO;

import java.util.List;

import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.somecompany.VO.LoginVO;
import com.somecompany.baseDAO.BaseDao;
import com.somecompany.mapper.LoginMapper;
import com.somecompany.model.PmdUser;
package com.somecompany.baseDAO;

import java.lang.reflect.ParameterizedType;
import java.util.List;
import java.util.Map;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceException;
import javax.persistence.Query;
import org.springframework.transaction.annotation.Transactional;

import org.springframework.beans.factory.annotation.Autowired;


import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.ProjectionList;
import org.hibernate.criterion.Projections;

import org.springframework.stereotype.Repository;


@Repository
public abstract class BaseDao<E, K> {

/** The entity manager. */
@PersistenceContext(unitName = "pmd-web")
protected EntityManager entityManager;

/**
 * Gets the entity manager.
 *
 * @return the entity manager
 */
public EntityManager getEntityManager() {
    return entityManager;
}

/** The entity class. */
protected Class<E> entityClass;

/**
 * Instantiates a new base DAO.
 */
@SuppressWarnings("unchecked")
public BaseDao() {
    ParameterizedType genericSuperclass = (ParameterizedType) getClass().getGenericSuperclass();
    this.entityClass = (Class<E>) genericSuperclass.getActualTypeArguments()[0];
}

public List<E> findByNamedQuery(final String name, Object... params) {
    javax.persistence.Query query = getEntityManager().createNamedQuery(name);

    for (int i = 0; i < params.length; i++) {
        query.setParameter(i + 1, params[i]);
    }

    final List<E> result = (List<E>) query.getResultList();
    return result;
}
}
package com.somecompany.baseDAO;
导入java.lang.reflect.ParameterizedType;
导入java.util.List;
导入java.util.Map;
导入javax.persistence.EntityManager;
导入javax.persistence.PersistenceContext;
导入javax.persistence.PersistenceException;
导入javax.persistence.Query;
导入org.springframework.transaction.annotation.Transactional;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.hibernate.Criteria;
导入org.hibernate.Session;
导入org.hibernate.criteria.criteria;
导入org.hibernate.criteria.ProjectionList;
导入org.hibernate.criteria.Projections;
导入org.springframework.stereotype.Repository;
@存储库
公共抽象类BaseDao{
/**实体管理器*/
@PersistenceContext(unitName=“pmd web”)
受保护的实体管理器实体管理器;
/**
*获取实体管理器。
*
*@返回实体管理器
*/
公共实体管理器getEntityManager(){
返回实体管理器;
}
/**实体类*/
保护类实体类;
/**
*实例化一个新的基本DAO。
*/
@抑制警告(“未选中”)
公共数据库(){
ParameteredType genericSuperclass=(ParameteredType)getClass().getGenericSuperclass();
this.entityClass=(类)genericSuperclass.getActualTypeArguments()[0];
}
公共列表findByNamedQuery(最终字符串名称、对象…参数){
javax.persistence.Query Query=getEntityManager().createNamedQuery(名称);
对于(int i=0;i
在部署应用程序war并执行REST服务时,我得到了一个异常

Caused by: java.lang.IllegalArgumentException: No query defined for that name [findByUsername]
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.buildQueryFromName(AbstractEntityManagerImpl.java:788) [hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final]
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createNamedQuery(AbstractEntityManagerImpl.java:767) [hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.8.0_65]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [rt.jar:1.8.0_65]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_65]
at java.lang.reflect.Method.invoke(Method.java:497) [rt.jar:1.8.0_65]
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:294) [spring-orm-4.2.5.RELEASE.jar:4.2.5.RELEASE]
at com.sun.proxy.$Proxy92.createNamedQuery(Unknown Source)
at com.somecompany.baseDAO.BaseDao.findByNamedQuery(BaseDao.java:184) [classes:]
at com.somecompany.loginDAO.LoginDAO.authenticateUser(LoginDAO.java:26) [classes:]
at com.somecompany.loginDAO.LoginDAO$$FastClassBySpringCGLIB$$1909bedd.invoke(<generated>) [classes:]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) [spring-core-4.2.5.RELEASE.jar:4.2.5.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:651) [spring-aop-4.2.5.RELEASE.jar:4.2.5.RELEASE]
at com.somecompany.loginDAO.LoginDAO$$EnhancerBySpringCGLIB$$45d26c87.authenticateUser(<generated>) [classes:]
at com.somecompany.loginService.LoginService.authenticateUser(LoginService.java:25) [classes:]
at com.somecompany.loginService.LoginService$$FastClassBySpringCGLIB$$3de2163d.invoke(<generated>) [classes:]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) [spring-core-4.2.5.RELEASE.jar:4.2.5.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:720) [spring-aop-4.2.5.RELEASE.jar:4.2.5.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) [spring-aop-4.2.5.RELEASE.jar:4.2.5.RELEASE]
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) [spring-tx-4.2.5.RELEASE.jar:4.2.5.RELEASE]
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281) [spring-tx-4.2.5.RELEASE.jar:4.2.5.RELEASE]
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) [spring-tx-4.2.5.RELEASE.jar:4.2.5.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) [spring-aop-4.2.5.RELEASE.jar:4.2.5.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:655) [spring-aop-4.2.5.RELEASE.jar:4.2.5.RELEASE]
at com.somecompany.loginService.LoginService$$EnhancerBySpringCGLIB$$912637e7.authenticateUser(<generated>) [classes:]
at com.somecompany.loginController.LoginController.authenticateUser(LoginController.java:22) [classes:]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.8.0_65]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [rt.jar:1.8.0_65]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_65]
at java.lang.reflect.Method.invoke(Method.java:497) [rt.jar:1.8.0_65]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) [spring-web-4.2.5.RELEASE.jar:4.2.5.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) [spring-web-4.2.5.RELEASE.jar:4.2.5.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) [spring-webmvc-4.2.5.RELEASE.jar:4.2.5.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:817) [spring-webmvc-4.2.5.RELEASE.jar:4.2.5.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:731) [spring-webmvc-4.2.5.RELEASE.jar:4.2.5.RELEASE]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) [spring-webmvc-4.2.5.RELEASE.jar:4.2.5.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) [spring-webmvc-4.2.5.RELEASE.jar:4.2.5.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) [spring-webmvc-4.2.5.RELEASE.jar:4.2.5.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:968) [spring-webmvc-4.2.5.RELEASE.jar:4.2.5.RELEASE]
... 30 more
原因:java.lang.IllegalArgumentException:没有为该名称定义查询[findByUsername]
位于org.hibernate.jpa.spi.AbstractEntityManagerImpl.buildQueryFromName(AbstractEntityManagerImpl.java:788)[hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final]
在org.hibernate.jpa.spi.AbstractEntityManagerImpl.createNamedQuery(AbstractEntityManagerImpl.java:767)[hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final]
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)[rt.jar:1.8.0_65]
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)[rt.jar:1.8.065]
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[rt.jar:1.8.065]
在java.lang.reflect.Method.invoke(Method.java:497)[rt.jar:1.8.0_65]
在org.springframework.orm.jpa.SharedEntityManagerCreator$SharedentityManagerInvoke(SharedEntityManagerCreator.java:294)[spring-orm-4.2.5.RELEASE.jar:4.2.5.RELEASE]
位于com.sun.proxy.$Proxy92.createNamedQuery(未知源)
在com.somecompany.baseDAO.baseDAO.findByNamedQuery(baseDAO.java:184)[类:]
在com.somecompany.loginDAO.loginDAO.authenticateUser(loginDAO.java:26)[类:]
在com.somecompany.loginDAO.loginDAO$$FastClassBySpringCGLIB$$1909bedd.invoke()[classes:]
在org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)[spring-core-4.2.5.RELEASE.jar:4.2.5.RELEASE]
在org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:651)[spring-aop-4.2.5.RELEASE.jar:4.2.5.RELEASE]
位于com.somecompany.loginDAO.loginDAO$$EnhancerBySpringCGLIB$$45d26c87.authenticateUser()[类:]
在com.somecompany.loginService.loginService.authenticateUser(loginService.java:25)[类:]
在com.somecompany.loginService.loginService$$FastClassBySpringCGLIB$$3de2163d.invoke()[classes:]
在org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)[spring-core-4.2.5.RELEASE.jar:4.2.5.RELEASE]
位于org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:720)[spring-aop-4.2.5.RELEASE.jar:4.2.5.RELEASE]
在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:157)[spring-aop-4.2.5.RELEASE.jar:4.2.5.RELEASE]
位于org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)[spring-tx-4.2.5.RELEASE.jar:4.2.5.RELEASE]
在org.springframework.transaction.interceptor.TransactionSpectSupport.invokeWithinTransaction(TransactionSpectSupport.java:281)[spring-tx-4.2.5.RELEASE.jar:4.2.5.RELEASE]
在org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)[spring-tx-4.2.5.RELEASE.jar:4.2.5.RELEASE]
在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:179)[spring-aop-4.2.5.RELEASE.jar:4.2.5.RELEASE]
在org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:655)[spring-aop-4.2.5.RELEASE.jar:4.2.5.RELEASE]
位于com.somecompany.loginService.loginService$$EnhancerBySpringCGLIB$$912637e7.authenticateUser()[类:]
在com.somecompany.loginController.loginController.authenticateUser(loginController.java:22)[classes:]
在sun.reflect.NativeMethodAccessorImpl.inv
containerEntityManagerFactoryBean.setPackagesToScan("com.somecomany.model");
@EnableJpaRepositories(basePackages="com.somecompany.model.*")
@EnableJpaRepositories(basePackages="com.somecompany")
<?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="pmd-web">
    <description>project metrics dashboard</description>
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
    </properties>
</persistence-unit>
<?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="pmd-web">
    <class>com.somecompany.model.PmdCustomer</class>
    <class>com.somecompany.model.CustomerModule</class>
    <class>com.somecompany.model.Modules</class>
    <class>com.somecompany.model.Project</class>
    <class>com.somecompany.model.ProjectRelease</class>
    <class>com.somecompany.model.ProjectSprint</class>
    <class>com.somecompany.model.Role</class>
    <class>com.somecompany.model.User</class>
    <class>com.somecompany.model.UserRole</class>
</persistence-unit>