我正在尝试使用 Spring Boot 开发通用的 CRUD,我的通用实体基类使用serializable
@MappedSuperclass
public abstract class Entidade<T extends Serializable> implements Serializable {
private static final long serialVersionUID = 1L;
public abstract T getId();
public abstract T setId(T id);
}
@Entity
@Table(name = "cachorro")
@Getter
@Setter
@NoArgsConstructor
public class Cachorro extends Entidade<Long> {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "cachorro_seq")
private Long id;
@Column(length = 100, nullable = false)
private String nome;
@Override
public Long getId() {
return this.id;
}
@Override
public Long setId(Long id) {
return this.id;
}
}
因此,当我调用休息方法时,它会抛出一个异常,告诉您使用存储库方法时的转换。
@NoRepositoryBean
public interface AbstratoRepository<E extends Entidade<?>> extends JpaRepository<E, Serializable> {
}
@Repository
public interface CachorroRepository extends AbstratoRepository<Cachorro> {
}
套餐服务
public interface IAbstratoService<E> {
public List<E> carregarTodos();
public Optional<E> carregarPeloCodigo(Serializable id);
public void inserir(E entidade);
public void atualizar(E entidade);
public void deletar(Serializable id);
}
public class AbstratoServiceImpl<T extends Serializable, E extends Entidade<?>, R extends AbstratoRepository<E>>
implements IAbstratoService<E> {
@Autowired
private R repositorio;
@Override
public List<E> carregarTodos() {
return this.repositorio.findAll();
}
@Override
public Optional<E> carregarPeloCodigo(Serializable id) {
return this.repositorio.findById(id);
}
@Override
public void inserir(E entidade) {
this.repositorio.save(entidade);
}
@Override
public void atualizar(E entidade) {
this.repositorio.save(entidade);
}
@Override
public void deletar(Serializable id) {
this.repositorio.deleteById(id);
}
}
@Service
public class CachorroService extends AbstratoServiceImpl<Long, Cachorro, CachorroRepository> {
}
慕田峪7331174
相关分类