所以我一直在尝试把我的大脑围绕在这个错误上,所以我得到了一个相当标准的错误,我明白它告诉我什么,我只是不明白它是怎么得到这个错误的。
Caused by: org.springframework.data.mapping.PropertyReferenceException: No property stored found for type StorageItemEntity! Did you mean 'storedIn'?
at org.springframework.data.mapping.PropertyPath.<init>(PropertyPath.java:90) ~[spring-data-commons-2.4.8.jar:2.4.8]
at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:437) ~[spring-data-commons-2.4.8.jar:2.4.8]
at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:413) ~[spring-data-commons-2.4.8.jar:2.4.8]
at org.springframework.data.mapping.PropertyPath.lambda$from$0(PropertyPath.java:366) ~[spring-data-commons-2.4.8.jar:2.4.8]
at java.base/java.util.concurrent.ConcurrentMap.computeIfAbsent(ConcurrentMap.java:330) ~[na:na]
at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:348) ~[spring-data-commons-2.4.8.jar:2.4.8]
at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:331) ~[spring-data-commons-2.4.8.jar:2.4.8]
at org.springframework.data.repository.query.parser.Part.<init>(Part.java:81) ~[spring-data-commons-2.4.8.jar:2.4.8]
at org.springframework.data.repository.query.parser.PartTree$OrPart.lambda$new$0(PartTree.java:249) ~[spring-data-commons-2.4.8.jar:2.4.8]
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) ~[na:na]
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177) ~[na:na]
at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[na:na]
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na]
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) ~[na:na]
at org.springframework.data.repository.query.parser.PartTree$OrPart.<init>(PartTree.java:250) ~[spring-data-commons-2.4.8.jar:2.4.8]
at org.springframework.data.repository.query.parser.PartTree$Predicate.lambda$new$0(PartTree.java:383) ~[spring-data-commons-2.4.8.jar:2.4.8]
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) ~[na:na]
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177) ~[na:na]
at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[na:na]
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na]
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) ~[na:na]
at org.springframework.data.repository.query.parser.PartTree$Predicate.<init>(PartTree.java:384) ~[spring-data-commons-2.4.8.jar:2.4.8]
at org.springframework.data.repository.query.parser.PartTree.<init>(PartTree.java:95) ~[spring-data-commons-2.4.8.jar:2.4.8]
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:89) ~[spring-data-jpa-2.4.8.jar:2.4.8]
... 62 common frames omitted
这是一个标准错误,对吧?好吧,它告诉我没有为我的实体找到属性stored。有道理,但我似乎不明白为什么,因为我没有定义stored。好吧,这是一个把它弄得一团糟的查询
@Repository
public interface StorageItemDao extends JpaRepository<StorageItemEntity, Long> {
// All other methods omitted for sake of keeping it short
public List<StorageItemEntity> findAllByStoredIn(StorageType storedIn);
}
这是StorageItemEntity类
@Entity
@Table(name = "storage_item")
public class StorageItemEntity implements Serializable{
/**
*
*/
private static final long serialVersionUID = -5373908574936516693L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private int id;
@NotEmpty(message = "Storage item name can not be empty")
@Size(max = 100, message = "Storage item name can not exceed 100 characters")
@Column(name = "name")
private String name;
@Range(min = 0, message = "Amount in storage can not be less than 0")
@Column(name = "amount")
private int amount;
@Range(min = 0, message = "Amount expected in storage per week can not be less than 0")
@Column(name = "amount_expected")
private int amountExpected;
@NotNull(message = "Storage in type can not be empty")
@Column(name = "stored_in")
private StorageType storedIn;
@Size(max = 500, message = Constants.ADDITIONAL_INFO_EXCEED)
@Column(name = "additional_info")
private String additionalInfo;
@NotNull(message = "You need to have a vendor associated to this item")
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "vendor_id", referencedColumnName="id")
private VendorEntity vendor;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "type_of_storage_id", referencedColumnName="id")
private TypeOfStorageEntity typeOfStorage;
// All getters, setters, and constructors are omitted
}
我还想指出的是,StorageType是一个非常标准的枚举。这不是错误,但它是一个很好的说明,以防万一。那么,如果我从来没有在我的JPA方法中定义过said stored,为什么我会得到“没有为类型StorageItemEntity找到属性'stored'”呢?
谢谢
3条答案
按热度按时间wlzqhblo1#
看起来
In
是Spring查询派生使用的关键字,所以它需要一个stored
属性,即参数中提供的In
值。https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#appendix.query.method.predicate
您需要使用
@Query
注解来获得您想要的内容。tp5buhyn2#
我认为这是JPA模型中列名和变量名的问题,如果你想使用findAllByStoredIn,你可以像这样使用@Query注解。
存储库类,如
Model类就像
vshtjzan3#
这就足够解决这个问题了。@Repository公共接口AccountRepository扩展了JpaRepository〈Account,Long〉{
}