【问题标题】:Make CRUD in JPA using generic classes in Spring Boot在 Spring Boot 中使用泛型类在 JPA 中创建 CRUD
【发布时间】:2020-06-26 11:11:46
【问题描述】:

我正在尝试使用 Spring Boot 中的泛型类在 JPA 中创建 CRUD。但是当我尝试运行程序时,它给出了以下错误。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityRepo': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalArgumentException: Not a managed type: class java.lang.Object 
Caused by: java.lang.IllegalArgumentException: Not a managed type: class java.lang.Object

EntityController.java

@Autowired
    private EntityService<Myuser, Long> userService;

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public void saveEntity() {
        Myuser user = new Myuser("pawam");
        userService.saveEntity(user);

    }

实体服务

public interface EntityService<T, ID> {
    public T saveEntity(T t);
}

我的用户

@Entity
@Table(name = "myuser")
public class Myuser {

    private Long id;
    private String name;

    public Myuser() {
        super();
    }

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Myuser(String name) {
        super();
        this.name = name;
    }

}

EntityRepo.java

@Repository
public interface EntityRepo<T, ID> extends CrudRepository<T, ID> {
}

EntityServiceImpl.java

@Service
public class EntityServiceImpl<T, ID> implements EntityService<T, ID> {

    @Autowired
    private EntityRepo<T, ID> repo;

    @Override
    public T saveEntity(T t) {
        return repo.save(t);
    }
}

application.properties

spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
spring.datasource.username=postgres
spring.datasource.password=12345
# Hibernate ddl auto (create, create-drop, validate, update)
spring.jpa.hibernate.ddl-auto = update
spring.jpa.show-sql=true
spring.jpa.generate-ddl=true

我尝试在 EntityRepo.java 中将 @Repository 更改为 @NoRepositoryBean。但这也没有用。我能做些什么来解决这个问题?任何帮助表示赞赏。

【问题讨论】:

标签: java spring-boot jpa generics crud


【解决方案1】:

第 1 步:更改 EntityService

public interface EntityService {
        <S> S saveCustom(S entity);
}

第 2 步:将 EntityServiceImpl 更改为 Repository 并实现保存方法

@Repository
public class EntityServiceImpl implements EntityService {

    @PersistenceContext
    private EntityManager entityManager;

    @Override
    @Transactional 
    public <S> S saveCustom(S entity) {
        entityManager.persist(entity);
        return entity;
    }
}

第 3 步:从 EntityRepo 中删除 @Repository

public interface EntityRepo  extends JpaRepository<Myuser, Long> ,EntityService {   
}

第 4 步:更改控制器

@Autowired
private EntityRepo userService;

现在您可以使用

保存任何实体类型
userService.saveCustom(XYZ);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多