com.restApi.java.jpa.UserDaoServiceCommandLineRunner中的字段userDAOService需要类型为';service.UserDAOService';那是找不到的

com.restApi.java.jpa.UserDaoServiceCommandLineRunner中的字段userDAOService需要类型为';service.UserDAOService';那是找不到的,java,intellij-idea,compilation,runtime-error,Java,Intellij Idea,Compilation,Runtime Error,我正在基于诅咒创建一个简单的持久性jpa,但是代码不起作用,我找不到问题所在。 这就是错误: 启动ApplicationContext时出错。要显示条件报告,请在启用“调试”的情况下重新运行应用程序 2019-09-06 14:21:19.692错误8280---[main]o.s.b.d.记录故障分析报告者: 应用程序无法启动 说明: com.restApi.java.jpa.UserDaoServiceCommandLineRunner中的字段userDAOService需要找不到“se

我正在基于诅咒创建一个简单的持久性jpa,但是代码不起作用,我找不到问题所在。 这就是错误:

启动ApplicationContext时出错。要显示条件报告,请在启用“调试”的情况下重新运行应用程序

2019-09-06 14:21:19.692错误8280---[main]o.s.b.d.记录故障分析报告者:


应用程序无法启动


说明:

com.restApi.java.jpa.UserDaoServiceCommandLineRunner中的字段userDAOService需要找不到“service.userDAOService”类型的bean

注入点具有以下注释:

  • @org.springframework.beans.factory.annotation.Autowired(必需=true)
行动:

考虑在配置中定义“service.UserDAOService”类型的bean

进程已完成,退出代码为1

我将java openjdk 12与springboot和Intellij idea一起使用。windows 10上的所有内容

User.java

package entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class User {
    @Id 
    @GeneratedValue
    private long id;
    private String name;
    private String role;

    protected User(){

    }
    public User(String name, String role) {
        super();
        this.name = name;
        this.role = role;
    }

    public long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getRole() {
        return role;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", role='" + role + '\'' +
                '}';
    }
}
package service;

import entity.User;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.transaction.Transactional;

@Service
public class UserDAOService {
    @PersistenceContext
    private EntityManager entityManager;

    public long insert(User user){
        entityManager.persist(user);
        return user.getId();
    }
}
package com.restApi.java.jpa;

import entity.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import service.UserDAOService;

@Component
public class UserDaoServiceCommandLineRunner implements CommandLineRunner 
{
    @Autowired
    private UserDAOService userDAOService;

    private static final Logger log = 
LoggerFactory.getLogger(UserDaoServiceCommandLineRunner.class);

    @Override
    public void run(String... args) throws Exception {
        User user = new User("Tom","Admin");
        long insert = userDAOService.insert(user);
        log.info("User Created"+ user);
    }
}
package com.restApi.java.jpa;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class JpaApplication {

   public static void main(String[] args) {
      SpringApplication.run(JpaApplication.class, args);
   }

}
UserDAOService.java

package entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class User {
    @Id 
    @GeneratedValue
    private long id;
    private String name;
    private String role;

    protected User(){

    }
    public User(String name, String role) {
        super();
        this.name = name;
        this.role = role;
    }

    public long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getRole() {
        return role;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", role='" + role + '\'' +
                '}';
    }
}
package service;

import entity.User;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.transaction.Transactional;

@Service
public class UserDAOService {
    @PersistenceContext
    private EntityManager entityManager;

    public long insert(User user){
        entityManager.persist(user);
        return user.getId();
    }
}
package com.restApi.java.jpa;

import entity.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import service.UserDAOService;

@Component
public class UserDaoServiceCommandLineRunner implements CommandLineRunner 
{
    @Autowired
    private UserDAOService userDAOService;

    private static final Logger log = 
LoggerFactory.getLogger(UserDaoServiceCommandLineRunner.class);

    @Override
    public void run(String... args) throws Exception {
        User user = new User("Tom","Admin");
        long insert = userDAOService.insert(user);
        log.info("User Created"+ user);
    }
}
package com.restApi.java.jpa;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class JpaApplication {

   public static void main(String[] args) {
      SpringApplication.run(JpaApplication.class, args);
   }

}
UserDaoServiceCommandLineRunner.java

package entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class User {
    @Id 
    @GeneratedValue
    private long id;
    private String name;
    private String role;

    protected User(){

    }
    public User(String name, String role) {
        super();
        this.name = name;
        this.role = role;
    }

    public long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getRole() {
        return role;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", role='" + role + '\'' +
                '}';
    }
}
package service;

import entity.User;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.transaction.Transactional;

@Service
public class UserDAOService {
    @PersistenceContext
    private EntityManager entityManager;

    public long insert(User user){
        entityManager.persist(user);
        return user.getId();
    }
}
package com.restApi.java.jpa;

import entity.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import service.UserDAOService;

@Component
public class UserDaoServiceCommandLineRunner implements CommandLineRunner 
{
    @Autowired
    private UserDAOService userDAOService;

    private static final Logger log = 
LoggerFactory.getLogger(UserDaoServiceCommandLineRunner.class);

    @Override
    public void run(String... args) throws Exception {
        User user = new User("Tom","Admin");
        long insert = userDAOService.insert(user);
        log.info("User Created"+ user);
    }
}
package com.restApi.java.jpa;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class JpaApplication {

   public static void main(String[] args) {
      SpringApplication.run(JpaApplication.class, args);
   }

}
jpaaapplication.java

package entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class User {
    @Id 
    @GeneratedValue
    private long id;
    private String name;
    private String role;

    protected User(){

    }
    public User(String name, String role) {
        super();
        this.name = name;
        this.role = role;
    }

    public long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getRole() {
        return role;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", role='" + role + '\'' +
                '}';
    }
}
package service;

import entity.User;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.transaction.Transactional;

@Service
public class UserDAOService {
    @PersistenceContext
    private EntityManager entityManager;

    public long insert(User user){
        entityManager.persist(user);
        return user.getId();
    }
}
package com.restApi.java.jpa;

import entity.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import service.UserDAOService;

@Component
public class UserDaoServiceCommandLineRunner implements CommandLineRunner 
{
    @Autowired
    private UserDAOService userDAOService;

    private static final Logger log = 
LoggerFactory.getLogger(UserDaoServiceCommandLineRunner.class);

    @Override
    public void run(String... args) throws Exception {
        User user = new User("Tom","Admin");
        long insert = userDAOService.insert(user);
        log.info("User Created"+ user);
    }
}
package com.restApi.java.jpa;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class JpaApplication {

   public static void main(String[] args) {
      SpringApplication.run(JpaApplication.class, args);
   }

}
代码应显示消息“用户创建{User id}”

对不起,如果问题和信息没有正确上传,这是我的第一个问题

致以最良好的祝愿

更新 由于用户czpona的注释,代码现在正在运行,但仍然没有显示消息

jpaaapplication.java的代码如下: 包com.restApi.java.jpa

import entity.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import service.UserDAOService;

@SpringBootApplication
public class JpaApplication {

    public static void main(String[] args) {
        SpringApplication.run(JpaApplication.class, args);
    }
    public class UserDaoServiceCommandLineRunner implements 
CommandLineRunner {
        @Autowired
        private UserDAOService userDAOService;

        private final Logger log = 
LoggerFactory.getLogger(UserDaoServiceCommandLineRunner.class);

        @Override
        public void run(String... args) throws Exception {
            User user = new User("Toto","Admin");
            long insert = userDAOService.insert(user);
            log.info("User Created"+ user);
        }
    }

}

我发现你的代码有两个问题

首先是你的项目结构

您扫描的所有类(实体、组件、服务..)必须位于主类
jpaa应用程序所在的相同包(或子包)中,以使Spring boot应用程序能够扫描它们

因此,类
User
应该位于
com.restApi.java.jpa.entity
包下,而不是
entity

UserDAOService
应该在
com.restApi.java.jpa.service
包下,而不是
service

就像:

package com.restApi.java.jpa.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class User {
     *
     *
    }
和UserDAOService类,如:

package com.restApi.java.jpa.service;

import com.restApi.java.jpa.entity.User;
*
import javax.transaction.Transactional;

@Service
public class UserDAOService {
       *
       *
还有一件事

为了使
entityManager.persist(user)
工作,您必须打开一个事务,以便可以使用
@Transational
注释您的方法,如:

import org.springframework.transaction.annotation.Transactional;
*
@Transactional
public long insert(User user){
        entityManager.persist(user);
        return user.getId();
    }

在您的JPA应用程序中,您应该提到要扫描bean的包

@SpringBootApplication(scanBasePackages = {"service"})

但您没有执行CommandLineRunner。这是您想要做的吗?

嗨,Exequiel,UserDaoServiceCommandLineRunner的目的是什么?你为什么不直接把你的代码放到JPA应用程序中呢?嗨,我在Udemy上一门课,教授是这样做的。我还没有真正尝试将代码移动到另一个类/文件。我现在就去试试。嗨,现在正在运行,但没有在终端上显示消息。看一看。它展示了CommandLineRunner界面的用途。是的!这就是问题所在,结构是错误的。非常感谢你。