Spring启动 - 带有QueryDSL自定义查询实现的JPA - 实体未映射错误

时间:2017-02-20 15:06:35

标签: maven jpa spring-boot querydsl

我是初次启动并尝试使用Querydsl生成自定义查询的新手。我想根据用户选择的条件生成查询。 我为此编写了一个管理器类,在那里我将解析用户选择并且必须生成查询。

经理类

public class ActionServiceManager { 
        @Autowired
        private DefinitionRepository definitionRepository;

        @PersistenceContext (unitName = "FirstEntityManagerFactory") 
        private EntityManager em;

    public void search(String Name) throws Exception  {
        //Method1
    QDefinition definition = QDefinition.definition;
    BooleanExpression active = definition.deleted.isFalse();
    List<Definition> ww =new JPAQuery(em)
     .from(definition).where(active)
     .list(definition);

        //Method2 
        List<Definition> def = em.createQuery(
                   "SELECT id FROM definition WHERE deleted = false",Definition.class
                  ).getResultList();

    }
    }

实体类

@Entity
@DynamicInsert
@DynamicUpdate
@Table(name = definition", uniqueConstraints = @UniqueConstraint(columnNames = { "name", "id" }))
public class Definition  {

    private static final long serialVersionUID = 1L;

    @Id
    private Long id;
    @Column(name = "subject_id")
    private Long subjectId; 
    @Column(name = "status")
    private String Status;
    @Column(name = "name")
    private String name;
    @Column(name = "active")
    private boolean active;
    @Column(name = "deleted")
    private boolean deleted;

    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
/*
*all get set methods
*
*
*/

我试过的两种方法。它会导致以下错误。但是CTRL +点击从manger类映射到实体。任何帮助将不胜感激。

java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: Definition is not mapped [SELECT name FROM Definition WHERE deleted = false]
at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:189)
        at org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:109)
        at org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:95)
        at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:338)
        at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3678)
        at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3567)
        at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:708)
        at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:564)
        at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:301)
        at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:249)
        at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:278)
        at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:206)
        at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158)
        at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:131)
        at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:93)
        at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:167)
        at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301)

0 个答案:

没有答案