Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring Hibernate JPA with Java配置-抽象方法错误_Java_Spring_Hibernate_Jpa - Fatal编程技术网

Spring Hibernate JPA with Java配置-抽象方法错误

Spring Hibernate JPA with Java配置-抽象方法错误,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,由于Hibernate 5.2贬低了Criteria API,我将所有Criteria API代码更改为JPA,但当我尝试运行该程序时,它会给我以下错误: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [com/vincent/SSHAKB/configurati

由于Hibernate 5.2贬低了Criteria API,我将所有Criteria API代码更改为JPA,但当我尝试运行该程序时,它会给我以下错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [com/vincent/SSHAKB/configuration/DBConfig.class]: Invocation of init method failed; nested exception is java.lang.AbstractMethodError
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1076)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:851)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4736)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5181)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.AbstractMethodError: null
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:276)
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:490)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:878)
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60)
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:338)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:373)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:362)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
    ... 21 common frames omitted
Aug 21, 2016 5:47:59 PM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [com/vincent/SSHAKB/configuration/DBConfig.class]: Invocation of init method failed; nested exception is java.lang.AbstractMethodError
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1076)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:851)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4736)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5181)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.AbstractMethodError
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:276)
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:490)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:878)
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60)
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:338)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:373)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:362)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
    ... 21 more
DBConfig.java

With proper import
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.vincent.SSHAKB")
public class AppConfig extends WebMvcConfigurerAdapter {
    /**
     * Configure ViewResolvers to deliver preferred views.
     */
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/views/");
        viewResolver.setSuffix(".jsp");
        registry.viewResolver(viewResolver);
    }

    /**
     * Configure ResourceHandlers to serve static resources like CSS/ Javascript etc...
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("/static/");
    }

    @Override
    public void configurePathMatch(PathMatchConfigurer matcher) {
        matcher.setUseRegisteredSuffixPatternMatch(true);
    }
}
With proper import
@Configuration
@EnableTransactionManagement
@ComponentScan({ "com.vincent.SSHAKB.configuration" })
@PropertySource(value = { "classpath:application.properties" })
public class DBConfig {

    static final Logger logger = LoggerFactory.getLogger(DBConfig.class);

    @Autowired
    private Environment environment;

    public DBConfig() {
        super();
    }

    // beans

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
        final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(dataSource());
        em.setPackagesToScan(new String[] { "com.vincent.SSHAKB.model" });

        final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        em.setJpaVendorAdapter(vendorAdapter);
        em.setJpaProperties(hibernateProperties());

        return em;
    }
    @Bean
    public JpaVendorAdapter jpaVendorAdapter()
    {
        HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
        adapter.setShowSql(true);
        adapter.setGenerateDdl(false);
        adapter.setDatabasePlatform("org.hibernate.dialect.MySQLDialect");      

        return adapter;
    }

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(environment.getRequiredProperty("jdbc.driverClassName"));
        dataSource.setUrl(environment.getRequiredProperty("jdbc.url"));
        dataSource.setUsername(environment.getRequiredProperty("jdbc.username"));
        dataSource.setPassword(environment.getRequiredProperty("jdbc.password"));
        return dataSource;
    }

    private Properties hibernateProperties() {
        Properties properties = new Properties();
        properties.put("hibernate.dialect", environment.getRequiredProperty("hibernate.dialect"));
        properties.put("hibernate.show_sql", environment.getRequiredProperty("hibernate.show_sql"));
        properties.put("hibernate.format_sql", environment.getRequiredProperty("hibernate.format_sql"));
        return properties;        
    }

    @Bean
    public PlatformTransactionManager transactionManager(EntityManagerFactory emf){
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(emf);
        return transactionManager;
    }

    @Bean
    public PersistenceExceptionTranslationPostProcessor exceptionTranslation(){
        return new PersistenceExceptionTranslationPostProcessor();
    }

}
AbstractDao.java

With proper import
public abstract class AbstractDao<T extends Serializable> {
    private Class< T > clazz;

    @PersistenceContext
    EntityManager entityManager;

    public final void setClazz( Class< T > clazzToSet ){
        this.clazz = clazzToSet;
    }

    public T findOne( long id ){
        return entityManager.find( clazz, id );
    }
    @SuppressWarnings("unchecked")
    public List< T > findAll(){
        return entityManager.createQuery( "from " + clazz.getName() )
                .getResultList();
    }

    @SuppressWarnings("unchecked")
    public List<T> findAllWithMaxResult(int maxResult){
        return entityManager.createQuery("from " + clazz.getName())
                .setMaxResults(maxResult).getResultList();
    }

    public void create( T entity ){
        entityManager.persist( entity );
    }

    public T update( T entity ){
        return entityManager.merge( entity );
    }

    public void delete( T entity ){
        entityManager.remove( entity );
    }
    public void deleteById( long entityId ){
        T entity = findOne( entityId );
        delete( entity );
    }
}
正确导入
公共抽象类AbstractDao{
私人班clazz;
@持久上下文
实体管理器实体管理器;
公共最终无效集合(类别集合集合){
this.clazz=clazzToSet;
}
公共T findOne(长id){
返回entityManager.find(clazz,id);
}
@抑制警告(“未选中”)
公共列表findAll(){
返回entityManager.createQuery(“from”+clazz.getName())
.getResultList();
}
@抑制警告(“未选中”)
公共列表findAllWithMaxResult(int-maxResult){
返回entityManager.createQuery(“from”+clazz.getName())
.setMaxResults(maxResult).getResultList();
}
公共无效创建(T实体){
entityManager.persist(实体);
}
公共T更新(T实体){
返回entityManager.merge(实体);
}
公共作废删除(T实体){
entityManager.remove(实体);
}
公共void deleteById(长entityId){
T entity=findOne(entityId);
删除(实体);
}
}
UserDAOImpl.java

With Proper Import
@Repository("UserDAO")
public class UserDAOImpl extends AbstractDao<User> implements UserDAO {

    static final Logger logger = LoggerFactory.getLogger(UserDAOImpl.class);

    public UserDAOImpl(){
        setClazz(User.class);
    }
    @Override
    public List<User> topTenUsers() {
        logger.info("UserDAO topTenUsers");
        List<User> users = (List<User>) findAllWithMaxResult(10);
        return users;
    }

    @Override
    public List<User> findAll() {
        return (List<User>) findAll();
    }

}
With Proper Import

@Repository("departmentDAO")
public class DepartmentDAOImpl extends AbstractDao<Department> implements DepartmentDAO{

    public DepartmentDAOImpl(){
        setClazz(Department.class);
    }
    @Override
    public List<Department> findAll() {
        return (List<Department>) findAll();
    }

}
正确导入
@存储库(“UserDAO”)
公共类UserDAOImpl扩展了AbstractDao,实现了UserDAO{
静态最终记录器Logger=LoggerFactory.getLogger(UserDAOImpl.class);
公共UserDAOImpl(){
setClazz(User.class);
}
@凌驾
公共列表topTenUsers(){
logger.info(“UserDAO topTenUsers”);
列表用户=(列表)findAllWithMaxResult(10);
返回用户;
}
@凌驾
公共列表findAll(){
返回(列表)findAll();
}
}
DepartmentDAOImpl.java

With Proper Import
@Repository("UserDAO")
public class UserDAOImpl extends AbstractDao<User> implements UserDAO {

    static final Logger logger = LoggerFactory.getLogger(UserDAOImpl.class);

    public UserDAOImpl(){
        setClazz(User.class);
    }
    @Override
    public List<User> topTenUsers() {
        logger.info("UserDAO topTenUsers");
        List<User> users = (List<User>) findAllWithMaxResult(10);
        return users;
    }

    @Override
    public List<User> findAll() {
        return (List<User>) findAll();
    }

}
With Proper Import

@Repository("departmentDAO")
public class DepartmentDAOImpl extends AbstractDao<Department> implements DepartmentDAO{

    public DepartmentDAOImpl(){
        setClazz(Department.class);
    }
    @Override
    public List<Department> findAll() {
        return (List<Department>) findAll();
    }

}
正确导入
@存储库(“部门DAO”)
公共类DepartmentDAOImpl扩展AbstractDao实现DepartmentDAO{
公共部门{
setClazz(系级);
}
@凌驾
公共列表findAll(){
返回(列表)findAll();
}
}
我不明白为什么它说的是抽象错误。。。如果我使用CriteriaAPI的旧方法,代码将正常工作(显然需要更改DBConfig.java的实现)

我已经用一些问题搜索了stackoverflow,但我找不到解决方案

编辑:我用堆栈跟踪更新了错误
解决方法:使用最新的jadira和hibernate验证器,不要混淆hibernate 4和hibernate 5之间的版本

您正在为jadira用户类型使用版本3.0.0.CR1。您能试用最新版本的Jadira Usertype Core吗?hibernate 5和jadira用户类型版本存在一些问题。

通过使用最新的jadira用户类型和hivernate验证程序进行修复,不要将hibernate 4和hibernate 5之间的版本混合使用。

发布嵌套异常。堆栈跟踪末尾的一个。说什么的那个AbstractMethodError@NeilStockton我更新了堆栈跟踪,现在已修复