有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用JPA为视图定义DTO和存储库的java问题

我想使用Spring+JPA+Hibernate为视图定义DTO和存储库

经过大量研究,我尝试将我的DTO定义如下:

@Table(name = "view_my_table")
public class ViewMyTable {

    @Column
    private String domain;

    @Column
    private String subdomain;

    @Column
    private String usr;

    // getters and setters
}

仅将@Table注释设置为类,将@Column注释设置为列

然后我有了相关的存储库:

@Repository
public interface IViewMyTableRepository extends IRepository<ViewMyTable, ViewMyTable> {

    List<T> findByDomain(String domain);

    List<T> findBySubdomain(String subdomain);

    List<T> findByUsr(String usr);
}

看起来一切正常,但当我启动应用程序时,出现了一些错误:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'IViewMyTableRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Could not create query metamodel for method public abstract List a.b.c.interfaces.IViewMyTableRepository.findByDomain(java.lang.String)!
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:187)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1208)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1048)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1018)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:570)
    ... 52 more
Caused by: java.lang.IllegalArgumentException: Could not create query metamodel for method public abstract List a.b.c.interfaces.IViewMyTableRepository.findByDomain(java.lang.String)!
    at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:106)
    at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:214)
    at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$AbstractQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:77)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.<init>(RepositoryFactorySupport.java:435)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:220)
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:266)
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:252)
    at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:92)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
    ... 63 more
Caused by: java.lang.IllegalArgumentException: Not an entity: class a.b.c.views.dto.ViewMyTable
    at org.hibernate.jpa.internal.metamodel.MetamodelImpl.entity(MetamodelImpl.java:194)
    at org.hibernate.jpa.criteria.QueryStructure.from(QueryStructure.java:124)
    at org.hibernate.jpa.criteria.CriteriaQueryImpl.from(CriteriaQueryImpl.java:156)
    at org.springframework.data.jpa.repository.query.JpaQueryCreator.<init>(JpaQueryCreator.java:74)
    at org.springframework.data.jpa.repository.query.JpaCountQueryCreator.<init>(JpaCountQueryCreator.java:45)
    at org.springframework.data.jpa.repository.query.PartTreeJpaQuery$CountQueryPreparer.createCreator(PartTreeJpaQuery.java:259)
    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:241)
    at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:68)
    at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:103)
    ... 72 more

我认为RepositoryFactoryBean有问题,但我不知道是什么。有人知道如何用JPA正确定义视图吗

如果我将视图定义为指向自身的@Entity@IdClass,并将@Id包含到所有列中,则当列具有空值时,该视图不起作用

谢谢


共 (0) 个答案