Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “如何修复”;找不到类型[entity]的属性[repositoryMethod]&引用;何时使用继承实体的存储库?_Java_Spring_Spring Boot_Spring Data Jpa - Fatal编程技术网

Java “如何修复”;找不到类型[entity]的属性[repositoryMethod]&引用;何时使用继承实体的存储库?

Java “如何修复”;找不到类型[entity]的属性[repositoryMethod]&引用;何时使用继承实体的存储库?,java,spring,spring-boot,spring-data-jpa,Java,Spring,Spring Boot,Spring Data Jpa,我正在尝试为从另一个实体继承的实体设置SpringDataJPA存储库 我正在使用SpringBoot2.1.6和SpringDataJPA。我已经研究了这个问题并查看了文档,但是我发现的案例尽管相似,但没有一个很好地展示了当我们有实体继承时如何处理类的存储库 这是我的主要课程: @Entity @Inheritance(strategy = InheritanceType.JOINED) public abstract class Person implements Serializable

我正在尝试为从另一个实体继承的实体设置SpringDataJPA存储库

我正在使用SpringBoot2.1.6和SpringDataJPA。我已经研究了这个问题并查看了文档,但是我发现的案例尽管相似,但没有一个很好地展示了当我们有实体继承时如何处理类的存储库

这是我的主要课程:

@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
}
这里是从Person继承的类:

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

    private String vehicleModel;

    // Getters and setters omitted
}
因此,我创建了一个要在存储库中使用的过滤器:

public class DriverFilter {

    private String vehicleModel;

    // Getters and setters omitted
}
@NoRepositoryBean
public interface People<T extends Person> extends JpaRepository<T, Long> {
}
创建DriverQueries接口后:

public interface DriverQueries {

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

}
公共接口驱动程序查询{
公共页面过滤器(DriverFilter过滤器,可分页);
}
然后我实施了它:

public class DriverImpl implements DriverQueries {

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

}
公共类DriverImpl实现DriverQuery{
@凌驾
公共页面过滤器(驱动过滤器过滤器,可分页){
//代码省略
}
}
我创建基本存储库:

public class DriverFilter {

    private String vehicleModel;

    // Getters and setters omitted
}
@NoRepositoryBean
public interface People<T extends Person> extends JpaRepository<T, Long> {
}
@NoRepositoryBean
公共界面人员扩展JpaRepository{
}
最后,我为继承的类创建了存储库:

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

}
@存储库
公共接口驱动程序扩展了人员、驱动程序和查询{
}
但当我运行程序时,我有以下例外:

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
原因:org.springframework.data.mapping.PropertyReferenceException:找不到类型驱动程序的属性筛选器!
位于org.springframework.data.mapping.PropertyPath.(PropertyPath.java:94)
位于org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:382)
位于org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:358)
位于org.springframework.data.mapping.PropertyPath.lambda$from$0(PropertyPath.java:311)
位于java.util.concurrent.ConcurrentMap.computeIfAbsent(ConcurrentMap.java:324)
位于org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:293)
位于org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:276)
位于org.springframework.data.repository.query.parser.Part.(Part.java:81)
位于org.springframework.data.repository.query.parser.PartTree$OrPart.lambda$new$0(PartTree.java:250)
位于java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
位于java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
在java.util.Spliterators$ArraySpliterator.forEachRemaining处(Spliterators.java:948)
位于java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
位于java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
位于java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
位于java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
位于java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
位于org.springframework.data.repository.query.parser.PartTree$OrPart.(PartTree.java:251)
位于org.springframework.data.repository.query.parser.PartTree$Predicate.lambda$new$0(PartTree.java:380)
位于java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
位于java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
在java.util.Spliterators$ArraySpliterator.forEachRemaining处(Spliterators.java:948)
位于java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
位于java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
位于java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
位于java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
位于java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
位于org.springframework.data.repository.query.parser.PartTree$Predicate.(PartTree.java:381)
位于org.springframework.data.repository.query.parser.PartTree(PartTree.java:93)
位于org.springframework.data.jpa.repository.query.PartTreeJpaQuery(PartTreeJpaQuery.java:78)
... 103省略公共帧
如果我为一个普通类创建一个存储库,遵循与前一个相同的逻辑,那么一切都可以完美地工作

有人知道会出什么问题吗


谢谢大家!

如果我们类比类的父类(driverquerys)-driverquerysimpl为类指定了正确的名称,则此错误消失。在这种情况下,继承的类将被称为父类加上后缀Impl


Spring对此要求很严格。

对于如何创建自定义存储库有一些限制。请参阅。您不能使用不是存储库中定义的@Entity属性的类。为了解决这个问题,我建议您创建一个查询,该查询以单一类型显示您的筛选器属性,并在默认方法中调用它,该方法将接受您的筛选器参数,或者使用
JpaSpecificationExecutor
这是一个非常舒适的筛选界面