我是初次启动并尝试使用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)