首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring引导查询失败,没有实体,但它在Spring中工作

Spring引导查询失败,没有实体,但它在Spring中工作
EN

Stack Overflow用户
提问于 2022-09-03 05:04:42
回答 1查看 59关注 0票数 1

我使用了一个在Spring中工作的REST,并试图让它与Spring 2.7.3 java 11一起工作--这段代码在Spring中工作,我可以对api进行CRUD调用,但是在引导过程中使用相同的实体类、db、服务和dao得到以下错误。注释中的路径是正确的,因为文件存在于那里。使用bean执行器,我可以看到没有列出用户实体。

当我调用端点时,java抛出一个非实体错误。

代码语言:javascript
运行
复制
java.lang.IllegalArgumentException: Not an entity: class com.test.user.entity.User. 

我看过几个这样的questions,但是没有什么效果

代码语言:javascript
运行
复制
@RestController
@RequestMapping("/users")
public class UserRestController {

    @Autowired
    private UserService userService;
    
    
    @GetMapping(value="/get/", consumes = "application/json", produces = "application/json")
    public User getName(@RequestBody User user) {
        
        User result = userService.getName(user);
        
        return result;
        
    }
代码语言:javascript
运行
复制
@Service("userService")
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDAO userDao;
    private JSONObject obj;
    
    @Override
    @Transactional
    public User getName(User user) {

        String email = user.getEmail();
        User result = userDao.getUser(email);
        if (result != null) {
            User response = new User(result.getFirstName(), result.getLastName());
            return response;
        } else {
            throw new UserNotFoundException("User not found " + email);
        }
    }
代码语言:javascript
运行
复制
@Repository
public class UserDaoImpl implements UserDao{
    
    @PersistenceContext
    private EntityManager entityManager;
    
    private Logger logger = Logger.getLogger(getClass().getName());

    
    @Override
    public User getUser(String email) {
        Session session = entityManager.unwrap(Session.class);
        try {
            User user = new User();
            CriteriaBuilder criteria = session.getCriteriaBuilder();
            CriteriaQuery<User> cq = criteria.createQuery(User.class);
            Root<User> root = cq.from(User.class);
            Predicate predicate = criteria.equal(root.get("email"), email);
            Query query = session.createQuery(cq.select(root).where(predicate));
            user = (User)query.getSingleResult();
            return user;
        } catch (Exception e){
            logger.error(e);
        }
        return null;
    }
代码语言:javascript
运行
复制
@Repository
public interface UserRepository extends CrudRepository<User, String>{

}
代码语言:javascript
运行
复制
@SpringBootApplication(scanBasePackages = {"com.test.user"})
@EntityScan(basePackages = {"com.test.entity"})
public class UserServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(UserServiceApplication.class, args);
    }
代码语言:javascript
运行
复制
@Entity
@Table(name="users")
public class User {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name = "id")
    private int id;

    @NotNull
    @Pattern(regexp="^(\\+\\d{1,2}\\s)?\\(?\\d{3}\\)?[\\s.-]\\d{3}[\\s.-]\\d{4}$", message="Phone number must match the following: xxx-xxx-xxxx.")
    @Column(name="phone_number", unique=true)
    private String phoneNumber;
    
    @NotEmpty
    @Email(message="Email address is not well-formed.")
    @Column(name="email", unique=true)
    private String email;
    
    @NotNull
    @Column(name="first_name")
    @NotEmpty(message="First name is required.")
    @Pattern(regexp="[A-Za-z]{0,45}", message="First name must contain up tp 45 alphabetic characters.")
    private String firstName;
    
    @NotNull
    @NotEmpty(message="Last name is required.")
    @Pattern(regexp="[A-Za-z]{0,45}", message="Last name must contain up tp 45 alphabetic characters.")
    @Column(name="last_name")
    private String lastName;

    public User() {}
    
    public User(
            @NotNull @Pattern(regexp = "^(\\+\\d{1,2}\\s)?\\(?\\d{3}\\)?[\\s.-]\\d{3}[\\s.-]\\d{4}$", message = "Phone number must match the following: xxx-xxx-xxxx.") String phoneNumber,
            @NotEmpty @Email(message = "Email address is not well-formed.") String email,
            @NotNull @NotEmpty(message = "First name is required.") @Pattern(regexp = "[A-Za-z]{0,45}", message = "First name must contain up tp 45 alphabetic characters.") String firstName,
            @NotNull @NotEmpty(message = "Last name is required.") @Pattern(regexp = "[A-Za-z]{0,45}", message = "Last name must contain up tp 45 alphabetic characters.") String lastName) {
        super();
        this.phoneNumber = phoneNumber;
        this.email = email;
        this.firstName = firstName;
        this.lastName = lastName;
    }
    
    public User(
            @NotNull @NotEmpty(message = "First name is required.") @Pattern(regexp = "[A-Za-z]{0,45}", message = "First name must contain up tp 45 alphabetic characters.") String firstName,
            @NotNull @NotEmpty(message = "Last name is required.") @Pattern(regexp = "[A-Za-z]{0,45}", message = "Last name must contain up tp 45 alphabetic characters.") String lastName) {
        super();
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", phoneNumber=" + phoneNumber + ", email=" + email + ", firstName=" + firstName
                + ", lastName=" + lastName + "]";
    }
    
    
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-03 07:18:49

实体包com.test.user.entity缺少在@EntityScan(basePackages = {"com.test.entity"})注释中。修复当前的基本包,或者使用

代码语言:javascript
运行
复制
@EntityScan(basePackages = {"com.test.entity", "com.test.user.entity"})

当实体包驻留在@SpringBootApplication(scanBasePackages = {"com.test.user"})中时,可以删除实体扫描注释。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73589766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档