gpt4 book ai didi

entitymanager - Micronauts 无法为 : UserRepository 类的参数 [entityManager] 注入(inject)值

转载 作者:行者123 更新时间:2023-12-04 10:28:06 26 4
gpt4 key购买 nike

我正在尝试在存储库中注入(inject) EntityManager。
编译成功,但是当我运行应用程序并发送一个发布请求时,我收到了这个错误:

Unexpected error occurred: Failed to inject value for parameter [entityManager] of class: aututor.apps.DAO.Repository.RepositoryImp.UserRepository

Message: No bean of type [javax.persistence.EntityManager] exists. Make sure the bean is not disabled by bean requirements (enable trace logging for 'io.micronaut.context.condition' to check) and if the bean is enabled then ensure the class is declared a bean and annotation processing is enabled (for Java and Kotlin the 'micronaut-inject-java' dependency should be configured as an annotation processor).
Path Taken: new UserController([UserService service]) --> new UserServiceImpl([IUserRepository userRepository]) --> new UserRepository([EntityManager entityManager])
io.micronaut.context.exceptions.DependencyInjectionException: Failed to inject value for parameter [entityManager] of class: aututor.apps.DAO.Repository.RepositoryImp.UserRepository

这是存储库:
package aututor.apps.DAO.Repository.IRepository;

import aututor.apps.DAO.Model.*;

public interface IUserRepository {
public User save(User User);
public User findByEmail(String Email);
}

package aututor.apps.DAO.Repository.RepositoryImp;

import aututor.apps.DAO.Model.User;
import aututor.apps.DAO.Repository.IRepository.IUserRepository;
import io.micronaut.configuration.hibernate.jpa.scope.CurrentSession;
import javax.inject.Singleton;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;


@Singleton
public class UserRepository implements IUserRepository {

@PersistenceContext
protected EntityManager entityManager;

public UserRepository(@CurrentSession EntityManager entityManager) {
this.entityManager = entityManager;
}

@Override
public User save(User User) {
return entityManager.merge(User);
}


@Override
public User findByEmail(String Email) {
return entityManager.createQuery("SELECT user FROM User user WHERE user.Email = :email", User.class)
.setParameter("email", Email)
.getSingleResult();
}
}

这是服务:
package aututor.apps.Services.ServicesImpl;

import aututor.apps.DAO.Model.User;
import aututor.apps.DAO.Repository.IRepository.IUserRepository;
import aututor.apps.DTO.Mapper.UserMapper;
import aututor.apps.DTO.UserDTO;
import aututor.apps.Services.IServices.UserService;
import aututor.apps.Util.Response;

import javax.inject.Singleton;

@Singleton
public class UserServiceImpl implements UserService {
protected final IUserRepository userRepository;
protected final UserMapper userMapper= new UserMapper();

public UserServiceImpl(IUserRepository userRepository) {
this.userRepository = userRepository;
}

@Override
public Response CreateUser(UserDTO User) {

if(userRepository.findByEmail(User.getEmail())==null) {
User u = userRepository.save(userMapper.ToUser(User));
return new Response("request has succeeded",userMapper.ToUserDTO(u),200);
}
else {
return new Response("Not Acceptable : Adress email already exist",null,406);
}
}

@Override
public Response UpdateUser(UserDTO User) {
return null;
}

@Override
public Response DeleteUser(UserDTO User) {
return null;
}

@Override
public Response FindUserByID(Long Id) {
return null;
}

}

Controller :
package aututor.apps.Controllers;

import aututor.apps.DTO.UserDTO;
import aututor.apps.Services.IServices.UserService;
import aututor.apps.Util.Response;
import io.micronaut.http.MediaType;
import io.micronaut.http.annotation.*;

@Controller("/rest/User")
public class UserController {
protected final UserService service ;

public UserController(UserService service) {
this.service = service;
}

@Post("/")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response CreateUser(@Body UserDTO user) {
return service.CreateUser(user);
}
}

构建.gradle:
dependencies {
annotationProcessor platform("io.micronaut:micronaut-bom:$micronautVersion")
annotationProcessor "io.micronaut:micronaut-inject-java"
annotationProcessor "io.micronaut:micronaut-validation"
annotationProcessor "io.micronaut.data:micronaut-data-processor:1.0.0"
implementation platform("io.micronaut:micronaut-bom:$micronautVersion")
implementation "io.micronaut:micronaut-security-jwt"
implementation "io.micronaut:micronaut-http-client"
implementation "io.micronaut:micronaut-validation"
implementation "io.micronaut:micronaut-http-server-netty"
implementation "io.micronaut.configuration:micronaut-hibernate-jpa"
implementation("io.micronaut:micronaut-spring")
compile "io.micronaut.configuration:micronaut-jdbc-tomcat"
compile "io.micronaut:micronaut-runtime"
compile "io.micronaut:micronaut-inject"
compile("io.micronaut.data:micronaut-data-hibernate-jpa")
compile("io.micronaut.data:micronaut-data-jdbc")
compile("org.postgresql:postgresql:42.2.1")
runtimeOnly "ch.qos.logback:logback-classic:1.2.3"
testAnnotationProcessor platform("io.micronaut:micronaut-bom:$micronautVersion")
testAnnotationProcessor "io.micronaut:micronaut-inject-java"
testImplementation platform("io.micronaut:micronaut-bom:$micronautVersion")
testImplementation "org.junit.jupiter:junit-jupiter-api"
testImplementation "io.micronaut.test:micronaut-test-junit5"
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine"
}

应用程序.yml:
---
micronaut:
application:
name: apps
server:
port: 8089

---

datasources:
default:
url: jdbc:postgresql://localhost:5432/db
username: root
password: ''
schema-generate: CREATE_DROP
jpa:
default:
properties:
hibernate:
hbm2ddl:
auto: update
dialect: org.hibernate.dialect.PostgreSQL95Dialect
entity-scan:
packages: 'apps.model'

我曾尝试与 CrudRepository 合作,但那里也存在问题。一切看起来都是正确的,我不知道我是否错过了什么。

最佳答案

我开始使用 Micronaut JPA 和 Hibernate,遇到了与您相同的问题。无论扫描 application.yml 是否都无法告诉您您是否没有正确定义您的 jpa 设置。在通过查看您的设置并尝试让 Micronaut 处理数据(并且几乎要放弃使用 Micronaut 访问数据)从查看您的设置中获得经验之后,我最好的选择是您定义了您的实体-扫描包错误。如果您指定实体扫描包,则它必须是封装的包,或者是使用@Entity 注释的类的父封装包。在您的情况下,您将 apps.model 指定为您的包,但我看不到您提供的代码中的任何地方引用了遵循该包格式的任何内容。不知道为什么你有一个 aututor.apps.DAO.Model.User 包。模型应该与您的 DAO 分开。最简单的方法是删除实体扫描包并让所有类都被扫描。指定包应该可以提高性能,但是如果您没有很多文件,我认为这并没有什么不同。您可以指定 aututor 或 aututor.apps 或 aututor.apps.DAO 或 aututor.apps.DAO.Model 作为您的扫描包,如果您的带有 @Entity 的类在 aututor.apps.DAO.Model 包中,这应该可以工作。

关于entitymanager - Micronauts 无法为 : UserRepository 类的参数 [entityManager] 注入(inject)值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60548953/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com