我收到错误No property u found for type com.models.entities.OrderEntity
并且在我的生命中无法弄清楚如何调试它的来源。我猜测有一些不正确的映射。
我尝试启用log4j
,其中只提供org.hibernate
的详细信息。我尝试添加其他软件包,但它们没有被阅读。我相信我的log4j.properties
位于正确的位置。
log4j.properties
内容:
log4j.rootCategory=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %t %c:%L - %m%n
log4j.category.org.springframework.data=DEBUG,stdout
log4j.category.com.models.entities =DEBUG,stdout
我该怎么做才能确保log4j正在记录正确的软件包?
我的实体:
@Entity
@Table(name = "`Order`")
@NamedQueries({
@NamedQuery(name="Order.findByUUID", query="SELECT o FROM OrderEntity o WHERE o.uuid = :uuid"),
@NamedQuery(name="Order.findByInProduction", query="SELECT o FROM OrderEntity o WHERE o.inProduction = :inProduction")
})
public class OrderEntity {
private Integer id;
@javax.persistence.Column(name = "id", nullable = false, insertable = true, updatable = true, length = 10, precision = 0)
@GeneratedValue
@Id
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
private String uuid;
@javax.persistence.Column(name = "uuid", nullable = false, insertable = true, updatable = true, length = 128, precision = 0)
@Basic
public String getUuid() {
return uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
private Boolean inProduction;
@javax.persistence.Column(name = "in_production", nullable = false, insertable = true, updatable = true, length = 0, precision = 0)
@Basic
public Boolean getInProduction() {
return inProduction;
}
public void setInProduction(Boolean inProduction) {
this.inProduction = inProduction;
}
private Timestamp updated;
@javax.persistence.Column(name = "updated", nullable = true, insertable = true, updatable = true, length = 19, precision = 0)
@Basic
public Timestamp getUpdated() {
return updated;
}
public void setUpdated(Timestamp updated) {
this.updated = updated;
}
private Timestamp created;
@javax.persistence.Column(name = "created", nullable = false, insertable = true, updatable = true, length = 19, precision = 0)
@Basic
public Timestamp getCreated() {
return created;
}
public void setCreated(Timestamp created) {
this.created = created;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
OrderEntity that = (OrderEntity) o;
if (created != null ? !created.equals(that.created) : that.created != null) return false;
if (id != null ? !id.equals(that.id) : that.id != null) return false;
if (inProduction != null ? !inProduction.equals(that.inProduction) : that.inProduction != null) return false;
if (updated != null ? !updated.equals(that.updated) : that.updated != null) return false;
if (uuid != null ? !uuid.equals(that.uuid) : that.uuid != null) return false;
return true;
}
@Override
public int hashCode() {
int result = id != null ? id.hashCode() : 0;
result = 31 * result + (uuid != null ? uuid.hashCode() : 0);
result = 31 * result + (inProduction != null ? inProduction.hashCode() : 0);
result = 31 * result + (updated != null ? updated.hashCode() : 0);
result = 31 * result + (created != null ? created.hashCode() : 0);
return result;
}
private VendorEntity vendor;
@ManyToOne
@javax.persistence.JoinColumn(name = "vendor_id", referencedColumnName = "id", nullable = false)
public VendorEntity getVendor() {
return vendor;
}
public void setVendor(VendorEntity vendor) {
this.vendor = vendor;
}
private ShippingDestinationEntity shippingDestination;
@ManyToOne
@javax.persistence.JoinColumn(name = "shipping_destination_id", referencedColumnName = "id", nullable = false)
public ShippingDestinationEntity getShippingDestination() {
return shippingDestination;
}
public void setShippingDestination(ShippingDestinationEntity shippingDestination) {
this.shippingDestination = shippingDestination;
}
private Collection<OrderCustomFieldEntity> orderCustomFields;
@OneToMany(mappedBy = "order")
public Collection<OrderCustomFieldEntity> getOrderCustomFields() {
return orderCustomFields;
}
public void setOrderCustomFields(Collection<OrderCustomFieldEntity> orderCustomFields) {
this.orderCustomFields = orderCustomFields;
}
private Collection<ProductEntity> products;
@OneToMany(mappedBy = "order")
public Collection<ProductEntity> getProducts() {
return products;
}
public void setProducts(Collection<ProductEntity> products) {
this.products = products;
}
}
堆栈跟踪:
Caused by: org.springframework.data.mapping.PropertyReferenceException: No property u found for type com.models.entities.OrderEntity
at org.springframework.data.mapping.PropertyPath.<init>(PropertyPath.java:75)
at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:327)
at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:353)
at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:307)
at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:271)
at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:245)
at org.springframework.data.repository.query.parser.Part.<init>(Part.java:72)
at org.springframework.data.repository.query.parser.PartTree$OrPart.<init>(PartTree.java:180)
at org.springframework.data.repository.query.parser.PartTree$Predicate.buildTree(PartTree.java:260)
at org.springframework.data.repository.query.parser.PartTree$Predicate.<init>(PartTree.java:240)
at org.springframework.data.repository.query.parser.PartTree.<init>(PartTree.java:71)
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:57)
at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:90)
at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:162)
at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$AbstractQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:68)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.<init>(RepositoryFactorySupport.java:279)
at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:147)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.getObject(RepositoryFactoryBeanSupport.java:153)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.getObject(RepositoryFactoryBeanSupport.java:43)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:142)
... 26 more
更新:我刚从数据库中删除并重新生成了实体,但仍然收到同样的错误。
答案 0 :(得分:2)
事实证明,问题是由与我的存储库层的冲突引起的。尽管我有一个Order.findByUUID
命名查询,而我的OrderRepository
看起来像:
@Repository
public interface OrderRepository extends JpaRepository<OrderEntity, Integer> {
OrderEntity findByUUID(@Param("uuid") String uuid);
List<OrderEntity> findByInProduction(@Param("inProduction") Boolean inProduction);
}
删除命名查询并将上述方法更改为findByUuid
是解决方案。我仍然不确定它为什么失败,但这让我摆脱了问题并开始调试应用程序。
答案 1 :(得分:1)
堆栈跟踪显示您有一个JPQL查询(repository.query.parser
行),其中包含类似.u
的某些对象上的OrderEntity
。
也许对.u
或.u<space>
的文字搜索会帮助您发现问题?
它不必在OrderEntity
类本身。