【发布时间】:2021-02-19 02:57:06
【问题描述】:
这是我的模型:-
@MappedSuperclass
public class IdCommon {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Version
private Long version;
@CreatedBy
@Column(name = "created_by")
private String createdBy;
@CreatedDate
private Instant created;
@LastModifiedBy
@Column(name = "updated_by")
private String updatedBy;
@LastModifiedDate
private Instant updated;
}
@Entity
@Table(name="TBL_EMPLOYEES")
public class EmployeeEntity extends IdCommon {
@Column(name="first_name")
private String firstName;
@Column(name="last_name")
private String lastName;
@Column(name="email", nullable=false, length=200)
private String 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 String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "EmployeeEntity [id=" + 0 + ", firstName=" + firstName +
", lastName=" + lastName + ", email=" + email + "]";
}
}
我的存储库和服务:-
@Repository
public interface CommonRepository<E extends IdCommon> extends JpaRepository<E, Long>,
JpaSpecificationExecutor<E> {
}
@Service
public class EmployeeService {
//@Autowired
EmployeeRepository repository;
//@Autowired
CommonRepository<EmployeeEntity> commonRepository;
@Autowired
public EmployeeService(EmployeeRepository repository, CommonRepository<EmployeeEntity> commonRepository) {
this.repository = repository;
this.commonRepository = commonRepository;
}
public Page<EmployeeEntity> getAll(Pageable pageable){
Specification<EmployeeEntity> specification = (Specification<EmployeeEntity>) (root, query, builder) -> null;
return commonRepository.findAll(specification, pageable);
}
}
控制器:-
@RestController
@RequestMapping(path = "/employee")
public class EmployeeController2 {
@Autowired
private EmployeeService employeeService;
@GetMapping(path = "/all")
@ApiImplicitParams({
@ApiImplicitParam(name = "page", dataType = "integer", paramType = "query",
value = "page number"),
@ApiImplicitParam(name = "size", dataType = "integer", paramType = "query",
value = "Number of records per page."),
})
public Page<EmployeeEntity> getAll(@RequestParam(value = "sortBy", required = false, defaultValue = "created") String sortBy,
@ApiIgnore Pageable pageable,
@ApiParam(value = "sortDirection (desc/asc)")
@RequestParam(value = "sortDirection", required = false, defaultValue = "asc") String sortDirection){
if (sortDirection.equals("desc")) {
pageable = PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), Sort.by(sortBy).descending());
} else {
pageable = PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), Sort.by(sortBy).ascending());
}
return employeeService.getAll(pageable);
}
}
我收到了这个错误:-
: Servlet.service() 用于 servlet [dispatcherServlet] 的上下文中 path [] 抛出异常 [请求处理失败;嵌套异常 是 org.springframework.dao.InvalidDataAccessApiUsageException: 不是 实体:com.howtodoinjava.demo.model.IdCommon 类;嵌套异常 是 java.lang.IllegalArgumentException:不是实体:类 com.howtodoinjava.demo.model.IdCommon] 的根本原因
java.lang.IllegalArgumentException:不是实体:类 com.howtodoinjava.demo.model.IdCommon
正如上述错误所说,它不是实体。所以我在 IdCommon 中添加了@Entity 注释。然后我得到了新的错误:-
org.springframework.beans.factory.BeanCreationException: 错误 创建在类路径中定义的名称为“entityManagerFactory”的bean 资源 [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: 调用 init 方法失败;嵌套异常是 org.hibernate.AnnotationException:一个实体不能用注释 @Entity 和 @MappedSuperclass: com.howtodoinjava.demo.model.IdCommon
我如何做到这一点?我的要求是具有通用存储库类型。我会有很多类似的实体。为了避免很多代码,我应该使用泛型。
【问题讨论】:
标签: java spring spring-boot hibernate spring-data-jpa