【发布时间】:2016-05-31 19:03:15
【问题描述】:
我有一个看起来像这样的实体
@Entity(name = "encounter_pdf_export")
public class EncounterPDFExport<T extends Encounter> implements Serializable {
public static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Long pdfExportId;
@Any(metaColumn = @Column(name = "encounter_type"))
@Cascade(CascadeType.ALL)
@AnyMetaDef(
idType = "long",
metaType = "string",
metaValues = {
@MetaValue(value = "FooEncounter", targetEntity = FooEncounter.class)
})
@JoinColumn(name = "encounter_id")
private T encounter;
我要扩展的抽象类型是:
public abstract class Encounter {
public abstract Long getEncounterId();
}
这是我的 Spring 数据存储库
@Repository
public interface EncounterPDFExportRepository extends PagingAndSortingRepository<EncounterPDFExport, Long> {
EncounterPDFExport findOneByEncounter_encounterId(@Param("encounterId") Long encounterId);
}
在启动与 findOneByEncounter_encounterId 方法相关的应用程序时,我得到一个堆栈跟踪:
Caused by: java.lang.IllegalArgumentException: Unable to locate Attribute with the the given name [encounter] on this ManagedType [com.iimassociates.distiller.domain.EncounterPDFExport]
at org.hibernate.jpa.internal.metamodel.AbstractManagedType.checkNotNull(AbstractManagedType.java:144)
at org.hibernate.jpa.internal.metamodel.AbstractManagedType.getAttribute(AbstractManagedType.java:130)
at org.springframework.data.jpa.repository.query.QueryUtils.toExpressionRecursively(QueryUtils.java:468)
at org.springframework.data.jpa.repository.query.JpaQueryCreator$PredicateBuilder.getTypedPath(JpaQueryCreator.java:300)
at org.springframework.data.jpa.repository.query.JpaQueryCreator$PredicateBuilder.build(JpaQueryCreator.java:243)
at org.springframework.data.jpa.repository.query.JpaQueryCreator.toPredicate(JpaQueryCreator.java:148)
at org.springframework.data.jpa.repository.query.JpaQueryCreator.create(JpaQueryCreator.java:88)
at org.springframework.data.jpa.repository.query.JpaQueryCreator.create(JpaQueryCreator.java:46)
at org.springframework.data.repository.query.parser.AbstractQueryCreator.createCriteria(AbstractQueryCreator.java:109)
at org.springframework.data.repository.query.parser.AbstractQueryCreator.createQuery(AbstractQueryCreator.java:88)
at org.springframework.data.repository.query.parser.AbstractQueryCreator.createQuery(AbstractQueryCreator.java:73)
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery$QueryPreparer.<init>(PartTreeJpaQuery.java:116)
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery$CountQueryPreparer.<init>(PartTreeJpaQuery.java:237)
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:65)
at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:100)
我假设 Spring Data JPA 不支持抽象/通用字段?如果是这种情况,创建 @Query 是否足够解决问题?
【问题讨论】:
-
看来我可能会遇到这个问题:jira.spring.io/browse/DATAJPA-836
标签: spring hibernate jpa spring-boot spring-data-jpa