Cómo corregir "Ninguna propiedad [repositoryMethod] encontró para el tipo de [la entidad]!" cuando estoy usando un repositorio de una entidad hereditaria?

Raffa:

Estoy tratando de configurar un repositorio de datos de Primavera Jpa para una entidad que hereda de otra entidad.

Estoy usando la primavera de arranque 2.1.6 con la primavera de datos JPA. Ya investigado el problema y miré la documentación, pero los casos que he encontrado, aunque similares, ninguno mostró muy bien cómo manejar repositorios para las clases cuando tenemos herencia de entidades.

Aquí tengo la clase 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
}

Y aquí la clase que hereda de la persona:

@Entity
@PrimaryKeyJoinColumn(name="id")
public class Driver extends Person   {

    private String vehicleModel;

    // Getters and setters omitted
}

Así que he creado un filtro para su uso en el repositorio:

public class DriverFilter {

    private String vehicleModel;

    // Getters and setters omitted
}

Después de crear las DriverQueries Interfaz:

public interface DriverQueries {

    public Page<Driver> filter(DriverFilter filter, Pageable pageable);

}

Y entonces hice su implementación:

public class DriverImpl implements DriverQueries {

    @Override
    public Page<Driver> filter(DriverFilter filter, Pageable pageable) {
        // code omitted
    }

}

Creo el repositorio de la base:

@NoRepositoryBean
public interface People<T extends Person> extends JpaRepository<T, Long> {
}

Y, por último, se crea el repositorio para la clase heredada:

@Repository
public interface Drivers extends People<Driver>, DriverQueries {

}

Pero cuando ejecuto el programa, tengo la siguiente excepción:

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

Si se crea un repositorio de una clase normal, siguiendo la misma lógica que la anterior, todo funciona perfectamente.

¿Alguien sabe qué podría estar mal?

¡Gracias!

Serg Zenyuk:

Este error desaparece si asignamos a la clase DriverImpl el nombre correcto por analogía con los padres (que DriverQueries ) - DriverQueriesImpl . En este caso, la clase heredada será llamado como el padre, más el sufijo Impl .

La primavera es estricta en esto.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=236396&siteId=1
Recomendado
Clasificación