Eu estou tentando configurar um repositório Primavera de dados JPA para uma entidade que herda de outra entidade.
Eu estou usando Spring Bota 2.1.6 com a Primavera de dados JPA. Eu já pesquisou o problema e olhou para a documentação, mas os casos que eu encontrei, embora semelhante, nenhum mostrou muito bem como lidar com repositórios para as classes quando temos herança entidade.
Aqui eu tenho a classe principal:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Person implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// Getters and setters omitted
}
E aqui a classe que herda de Pessoa:
@Entity
@PrimaryKeyJoinColumn(name="id")
public class Driver extends Person {
private String vehicleModel;
// Getters and setters omitted
}
Então, eu criei um filtro para usar no repositório:
public class DriverFilter {
private String vehicleModel;
// Getters and setters omitted
}
Depois de ter criado os DriverQueries Interface:
public interface DriverQueries {
public Page<Driver> filter(DriverFilter filter, Pageable pageable);
}
E então eu fiz a sua implementação:
public class DriverImpl implements DriverQueries {
@Override
public Page<Driver> filter(DriverFilter filter, Pageable pageable) {
// code omitted
}
}
I criar o repositório de base:
@NoRepositoryBean
public interface People<T extends Person> extends JpaRepository<T, Long> {
}
E, finalmente, criar o repositório para a classe herdada:
@Repository
public interface Drivers extends People<Driver>, DriverQueries {
}
Mas quando eu executar o programa, eu tenho a seguinte exceção:
Caused by: org.springframework.data.mapping.PropertyReferenceException: No property filter found for type Driver!
at org.springframework.data.mapping.PropertyPath.<init>(PropertyPath.java:94)
at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:382)
at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:358)
at org.springframework.data.mapping.PropertyPath.lambda$from$0(PropertyPath.java:311)
at java.util.concurrent.ConcurrentMap.computeIfAbsent(ConcurrentMap.java:324)
at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:293)
at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:276)
at org.springframework.data.repository.query.parser.Part.<init>(Part.java:81)
at org.springframework.data.repository.query.parser.PartTree$OrPart.lambda$new$0(PartTree.java:250)
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
at org.springframework.data.repository.query.parser.PartTree$OrPart.<init>(PartTree.java:251)
at org.springframework.data.repository.query.parser.PartTree$Predicate.lambda$new$0(PartTree.java:380)
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
at org.springframework.data.repository.query.parser.PartTree$Predicate.<init>(PartTree.java:381)
at org.springframework.data.repository.query.parser.PartTree.<init>(PartTree.java:93)
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:78)
... 103 common frames omitted
Se eu criar um repositório para uma classe normal, seguindo a mesma lógica que a anterior, tudo funciona perfeitamente.
Alguém sabe o que poderia estar errado?
Obrigado!
Este erro desaparece se nós atribuídos à classe DriverImpl o nome correto por analogia com ele pais ( DriverQueries ) - DriverQueriesImpl . Neste caso, a classe herdada será chamado como o pai, mais o sufixo Impl .
A mola é rigoroso sobre este.