Java 休眠条件查询选择where子句

Java 休眠条件查询选择where子句,java,sql,hibernate,spring-mvc,criteriaquery,Java,Sql,Hibernate,Spring Mvc,Criteriaquery,我正在制作一个spring hibernate web应用程序, 我有一张像上面这样的桌子。 我想得到的是: person: id | owner_email | firstname | lastname ----+-------------+-----------+---------- 44 | john@gmail.com | john | wood 45 | alex@gamil.com | alex

我正在制作一个spring hibernate web应用程序, 我有一张像上面这样的桌子。 我想得到的是:

person:

id | owner_email               | firstname | lastname 
----+-------------+-----------+----------
 44 | john@gmail.com           | john       | wood
 45 | alex@gamil.com           | alex       | greenwood
 49 | peter@gamil.com          | peter      | blacksmith
 50 | john@gmail.com           | lee        | wu
 51 | john@gmail.com           | jane       | li
因此,该方法将返回与相关的person对象列表john@gmail.com

这是我的查询代码,但不起作用

select * from person where owner_email='john@gmail.com'
请用代码示例帮助我,谢谢…

@PersistenceContext
HTTP Status 500 - Request processing failed; nested exception is java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException: Unable to locate appropriate constructor on class [com.example.model.Person] [select new com.example.model.Person(generatedAlias0.owner_email) from com.example.model.Person as generatedAlias0]
实体管理器; @交易的 公共列表listPerson(){ CriteriaQuery c=em.getCriteriaBuilder().createQuery(Person.class); Root-from=c.from(Person.class); c、 选择(从中); c、 其中(em.getCriteriaBuilder().equal(from.get(“所有者电子邮件”),”john@gmail.com);//
@PersistenceContext
实体管理器;
@交易的
公共列表listPerson(){
CriteriaQuery c=em.getCriteriaBuilder().createQuery(Person.class);
Root-from=c.from(Person.class);
c、 选择(从中);
c、 其中(em.getCriteriaBuilder().equal(from.get(“所有者电子邮件”),”john@gmail.com);//
@PersistenceContext
实体管理器;
@交易的
公共列表listPerson(){
CriteriaQuery c=em.getCriteriaBuilder().createQuery(Person.class);
Root-from=c.from(Person.class);
c、 选择(从中);
c、 其中(em.getCriteriaBuilder().equal(from.get(“所有者电子邮件”),”john@gmail.com);//
@PersistenceContext
实体管理器;
@交易的
公共列表listPerson(){
CriteriaQuery c=em.getCriteriaBuilder().createQuery(Person.class);
Root-from=c.from(Person.class);
c、 选择(从中);


c、 其中(em.getCriteriaBuilder().equal(from.get(“所有者电子邮件”),”john@gmail.com);//您的问题非常不清楚。如果您想要一个人员列表,为什么您的方法返回一个列表而不是列表?如果您想要从Person表中选择,为什么使用c.from(PrayTimes.class)而不是c.from(Person.clas)?如果您想在owner_电子邮件上添加谓词,为什么不添加一个谓词?代码与您的描述完全不匹配。最后,您到底为什么要使用条件而不是一个该死的简单JPQL查询:
从Person p中选择p,其中p.ownerEmail=:email
。现在您更改了代码,但错误与c不匹配ode.复制了错误的代码,,,只需编辑它就可以了,我应该把sql查询放在哪里?这里没有一个是Hibernate特有的;你使用的是所有JPA的东西。你的问题很不清楚。如果你想要一个人员列表,为什么你的方法返回一个列表而不是一个列表?如果你想从Person表中选择,为什么要使用c.from(PrayTimes.class)而非c.from(Person.clas)?如果您想在owner_电子邮件上添加谓词,为什么不添加一个谓词?代码与您的描述完全不匹配。最后,您到底为什么要使用条件而不是一个该死的简单JPQL查询:
从Person p中选择p,其中p.ownerEmail=:email
。现在您更改了代码,但错误与c不匹配ode.复制了错误的代码,,,只需编辑它就可以了,我应该把sql查询放在哪里?这里没有一个是Hibernate特有的;你使用的是所有JPA的东西。你的问题很不清楚。如果你想要一个人员列表,为什么你的方法返回一个列表而不是一个列表?如果你想从Person表中选择,为什么要使用c.from(PrayTimes.class)而非c.from(Person.clas)?如果您想在owner_电子邮件上添加谓词,为什么不添加一个谓词?代码与您的描述完全不匹配。最后,您到底为什么要使用条件而不是一个该死的简单JPQL查询:
从Person p中选择p,其中p.ownerEmail=:email
。现在您更改了代码,但错误与c不匹配ode.复制了错误的代码,,,只需编辑它就可以了,我应该把sql查询放在哪里?这里没有一个是Hibernate特有的;你使用的是所有JPA的东西。你的问题很不清楚。如果你想要一个人员列表,为什么你的方法返回一个列表而不是一个列表?如果你想从Person表中选择,为什么要使用c.from(PrayTimes.class)而非c.from(Person.clas)?如果您想在owner_电子邮件上添加谓词,为什么不添加一个谓词?代码与您的描述完全不匹配。最后,您到底为什么要使用条件而不是一个该死的简单JPQL查询:
从Person p中选择p,其中p.ownerEmail=:email
。现在您更改了代码,但错误与c不匹配ode.复制了错误的代码,,,只需编辑它就可以了,所以我应该把sql查询放在哪里?而且这里没有一个是Hibernate特定的;您使用的是所有JPA的东西。我编辑了您的答案来格式化您的代码。如果您更新它以引起对您更改的代码的重要部分的注意,这个答案可能会更好。@JasonC Thanx!我正在努力解决这个问题android应用程序中的wiki语法。建议:我将设置一个
builder
变量,而不是调用
em.getCriteriaBuilder()
多次。我已经编辑了你的答案以格式化你的代码。如果你对答案进行更新以引起人们对你所更改代码的重要部分的注意,这个答案可能会更好。@JasonC Thanx!我正在android应用程序中与wiki语法作斗争。建议:我将设置一个
builder
变量,而不是调用
em.getCriteri阿比尔德()
多次。我已经编辑了你的答案以格式化你的代码。如果你对答案进行更新以引起人们对你所更改代码的重要部分的注意,这个答案可能会更好。@JasonC Thanx!我正在android应用程序中与wiki语法作斗争。建议:我将设置一个
builder
变量,而不是调用
em.getCriteri阿比尔德()
多次。我已经编辑了你的答案以格式化你的代码。如果你对答案进行更新以引起人们对你所更改代码的重要部分的注意,这个答案可能会更好。@JasonC Thanx!我正在android应用程序中与wiki语法作斗争。建议:我将设置一个
builder
变量,而不是调用
em.getCriteriaBilder()
多次。
HTTP Status 500 - Request processing failed; nested exception is java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException: Unable to locate appropriate constructor on class [com.example.model.Person] [select new com.example.model.Person(generatedAlias0.owner_email) from com.example.model.Person as generatedAlias0]
@PersistenceContext 
EntityManager em;

@Transactional 
public List<Person> listPerson() { 
    CriteriaQuery<Person> c = em.getCriteriaBuilder().createQuery(Person.class); 
    Root<Person> from = c.from(Person.class); 

    c.select(from);
    c.where(em.getCriteriaBuilder().equal(from.get("owner_email"),"john@gmail.com")); // <- this will add the restriction. 

    c.orderBy(em.getCriteriaBuilder().asc(from.get("firstname"))); 
    return em.createQuery(c).getResultList(); 
}