在 Spring Boot 中使用泛型类在 JPA 中创建 CRUD



我正在尝试使用 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

实体控制器.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;
}
}

实体回购.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);
}
}

应用程序属性

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。但这也没有用。我该怎么做才能解决这个问题?任何帮助,不胜感激。

步骤 1:更改实体服务

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

第 2 步:将实体服务导入更改为存储库并实现保存方法

@Repository
public class EntityServiceImpl implements EntityService {
@PersistenceContext
private EntityManager entityManager;
@Override
@Transactional 
public <S> S saveCustom(S entity) {
entityManager.persist(entity);
return entity;
}
}

步骤 3:从实体存储库中删除@Repository

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

第 4 步:更改控制器

@Autowired
private EntityRepo userService;

现在,您可以使用以下方法保存任何实体类型

userService.saveCustom(XYZ);

最新更新