簡體   English   中英

創建Bean時出錯-Java-Maven 3.5-Spring 5-Hibernate 5

[英]Error creating Bean - Java - Maven 3.5 - Spring 5 - Hibernate 5

我正在為大學做作業,其中包括使用Java + Spring構建API,可以從收到的請求中保存IP,操作系統和瀏覽器。

該代碼通過以下URL在Github上上傳: https : //github.com/devMozo/MozoJava/tree/TP-4

我在使用的數據庫中有.sql。

當我嘗試使用Maven啟動程序時,控制台輸出一條錯誤,提示以下文本:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userController': Unsatisfied dependency expressed through field 'tUserDAO'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'iUserDAO': Post-processing of merged bean definition failed; nested exception is java.lang.NoSuchMethodError: javax.persistence.PersistenceContext.synchronization()Ljavax/persistence/SynchronizationType;
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:587) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:91) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:373) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1344) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:578) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:501) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:760) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:869) ~[spring-context-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~[spring-context-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140) ~[spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) [spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:395) [spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:327) [spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1255) [spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1243) [spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
at com.mozo.Tp4MozoNicolasApplication.main(Tp4MozoNicolasApplication.java:18) [classes/:na]

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'iUserDAO': Post-processing of merged bean definition failed; nested exception is java.lang.NoSuchMethodError: javax.persistence.PersistenceContext.synchronization()Ljavax/persistence/SynchronizationType;
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:556) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:501) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:251) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1138) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1065) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:584) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
... 19 common frames omitted

Caused by: java.lang.NoSuchMethodError: javax.persistence.PersistenceContext.synchronization()Ljavax/persistence/SynchronizationType;
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.<init>(PersistenceAnnotationBeanPostProcessor.java:653) ~[spring-orm-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.lambda$buildPersistenceMetadata$1(PersistenceAnnotationBeanPostProcessor.java:435) ~[spring-orm-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:522) ~[spring-core-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.buildPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:420) ~[spring-orm-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:394) ~[spring-orm-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(PersistenceAnnotationBeanPostProcessor.java:332) ~[spring-orm-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1016) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
... 28 common frames omitted

這是什么意思? 我找不到錯誤在哪里,這與我跳過的某些配置有關?

控制器:

@RestController
public class UserController {

    @Autowired
    private iUserDAO tUserDAO;

    @Autowired
    private iNavigatorDAO tNavigatorDAO;

    @Autowired
    private iOSDAO tOSDAO;

    @RequestMapping(value = "/")
    public Iterable<User> getIP(){
        // Get a Request object from the request sent
        HttpServletRequest tRequest = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes())
                .getRequest();
        // Get the IP from the object
        String ip = tRequest.getRemoteAddr();
        // Get the User-Agent propertie from the Request
        UserAgent tUserAgent = UserAgent.parseUserAgentString(tRequest.getHeader("User-Agent"));
        // Get the OS (Operating System)
        OperatingSystem tOperatingSystem = tUserAgent.getOperatingSystem();
        // Get the browser object
        Browser tBrowser = tUserAgent.getBrowser();
        // Now the version..
        Version tBrowserVersion = tUserAgent.getBrowserVersion();
        // Create a new User
        User tUser = new User();
        // Set the IP to the User
        tUser.setIp(ip);
        // Try too save the user
        try {
            // Create a new navigator's model
            Navigator tNavigator = new Navigator();
            // Set the name of the browser inside the object
            tNavigator.setName(tBrowser.getName() + " " + tBrowserVersion.getMajorVersion());
            // Create a new OS's model
            OS tOS = new OS();
            // Save the operative system's name
            tOS.setName(tOperatingSystem.getName());
            // Save the Browser in the DB
            this.tNavigatorDAO.save(tNavigator);
            // Save the OS
            this.tOSDAO.save(tOS);
            // Save this User on the DB
            this.tUserDAO.save(tUser);
        } catch (Exception e){
            System.out.println(e.getMessage());
        }
        // Return this IP
        return this.tUserDAO.findAll();
    }

   /* @RequestMapping(value = "/action/getBrowserMostUsed")
    public List<User> getBrowserMostUsed(){
        // Return this IP
        return this.tUserDAO.findAllUsers();
    }
    @RequestMapping(value = "/action/getOSMostUsed")
    public List<User> getOSMostUsed(){
        // Return this IP
        return this.tUserDAO.findAllUsers();
    }
    @RequestMapping(value = "/action/getCombinationMostUsed")
    public List<User> getCombinationMostUsed(){
        // Return this IP
        return this.tUserDAO.findAllUsers();
    }*/
}

倉庫:

@Transactional
public interface iUserDAO extends CrudRepository<User, Long> {

}

實體:

@Entity
@Getter
@Setter
@Table(name="users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="id", nullable = false)
    private int id;

    @Column(name="ip", nullable = false, unique = true)
    private String ip;

    @ManyToOne
    @Column(name="id_os", nullable = false)
    private String id_os;

    @ManyToOne
    @Column(name="id_browser", nullable = false)
    private String id_browser;
}

很抱歉分享我的所有代碼,我知道只共享錯誤的代碼會更好,但是我會再重復一次,我不知道出什么問題了,我看了很多教程和有類似問題的人,但是我繼續迷路。

原因:

您需要在iUserDAO中定義您的方法。

UserController.java ,您將像

this.tUserDAO.save(tUser)

this.tUserDAO.findAll()

this.tUserDAO.findAllUsers()

但是您尚未在iUserDAO.java定義這些方法。

package com.mozo.daos;
import com.mozo.models.User;
import org.springframework.data.repository.CrudRepository;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
 * UserService's Interface
 */
@Transactional
public interface iUserDAO extends CrudRepository<User, Long> {
    public User save(User user);
    public User findUserById(int id);
    public List<User> findAll();
}

發生了什么:

Spring正在幕后運行以消耗您的注釋,但是它沒有在接口上找到任何此類方法聲明以進行擴展,因此當Autowire接手時,它沒有方法可以將您的調用映射到。

我還將建議進行修改,以將相關代碼發布在您的問題中,以備將來使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM