Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA中的CriteriaBuilder-where子句_Java_Hibernate_Jpa_Hibernate Criteria - Fatal编程技术网

Java JPA中的CriteriaBuilder-where子句

Java JPA中的CriteriaBuilder-where子句,java,hibernate,jpa,hibernate-criteria,Java,Hibernate,Jpa,Hibernate Criteria,我是JPA的新手。使用where子句生成select查询。我需要从表Contacts中选择所有ContactName,这些ContactName等于字符串名称的值 使用以下代码创建数据库表: CREATE TABLE Contacts ( ContactId BIGINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, ContactName VARCHAR(100) NOT NULL, ContactEmailID VARCHAR(100) NOT

我是JPA的新手。使用where子句生成select查询。我需要从表Contacts中选择所有ContactName,这些ContactName等于字符串名称的值

使用以下代码创建数据库表:

CREATE TABLE Contacts (
ContactId BIGINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
ContactName VARCHAR(100) NOT NULL,
ContactEmailID VARCHAR(100) NOT NULL,
 UserName VARCHAR(100) NOT NULL,
 INDEX Contact_Names (ContactName)
 ) ENGINE = InnoDB;
下面是我的实体类

     @Entity

   private String UserName; 

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ContactId")
     public long getContactId() {
        return ContactId;
    }

    public void setContactId(long contactId) {
        ContactId = contactId;
    }


    @Basic
    @Column(name = "UserName")
    public String getUserName() {
    return UserName;
    }

    public void setUserName(String UserName) {
    this.UserName = UserName;
    }
下面是我试图编写CriteriaBuilder代码的ContactServlet类代码

         EntityManager manager = null;
         EntityTransaction transaction = null;
         try{

        manager = this.factory.createEntityManager();
        transaction = manager.getTransaction();
        transaction.begin();

      CriteriaBuilder cb = manager.getCriteriaBuilder();
       CriteriaQuery<Contact> q1 = cb.createQuery(Contact.class);
       Root<Contact> postRoot = q1.from(Contact.class);

       q1.select(postRoot).where(cb.equal(postRoot.get("UserName"), name));
       TypedQuery<Contact> qry = manager.createQuery(q1);

       List<Contact> result = qry.getResultList();
        for (Contact contactInstance : result)  
        {

         DBContactName = contactInstance.getContactName().trim();
         DBContactEmail = contactInstance.getContactEmailID().trim();
EntityManager=null;
EntityTransaction=null;
试一试{
manager=this.factory.createEntityManager();
事务=manager.getTransaction();
transaction.begin();
CriteriaBuilder cb=manager.getCriteriaBuilder();
CriteriaQuery q1=cb.createQuery(Contact.class);
根postRoot=q1.from(Contact.class);
q1.选择(postRoot).其中(cb.equal(postRoot.get(“用户名”),name));
TypedQuery qry=manager.createQuery(q1);
列表结果=qry.getResultList();
对于(联系人实例:结果)
{
DBContactName=contactInstance.getContactName().trim();
DBContactEmail=contactInstance.getContactEmailID().trim();

不知道我哪里出错了

以下是执行我的项目时出现的错误: java.lang.IllegalArgumentException:无法解析org.hibernate.jpa.criteria.path.AbstractPathImpl.unknownAttribute(AbstractPathImpl.java:117)org.hibernate.jpa.criteria.path.AbstractPathImpl.locateAttribute(AbstractPathImpl.java:214)org.hibernate.jpa.criteria.path.AbstractPathImpl.get上的路径属性[用户名](AbstractPathImpl.java:185)在com.ContactServlet.doPost(ContactServlet.java:110)在javax.servlet.http.HttpServlet.service(HttpServlet.java:644)在javax.servlet.http.HttpServlet.service(HttpServlet.java:725)在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)上org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)org.apache.catalina.core.core.ApplicationFilterChainorg.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)位于org.apache.CoyoteAdapter.java:534的org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1081)的org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658)位于org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222),位于org.apache.tomcat.util.net.niodempoint$SocketProcessor.doRun(niodempoint.java:1566),位于org.apache.tomcat.util.net.niodempoint$SocketProcessor.run(niodempoint.java:1523),位于java.util.concurrent.thpoolexecutor.runWorker(ThreadPoolExecutor.java:1142)在java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)在org.apache.tomcat.util.threads.TaskThread$wrappingranable.run(TaskThread.java:61)在java.lang.Thread.run(Thread.java:745)上运行(Thread.java:617)

尝试:

q1.select(postRoot).where(cb.equal(postRoot.get("userName"), name));

用户名属性的u小写。

我的第一个问题是,您需要将q1.select语句的结果传递给createQuery调用,例如manager.createQuery(q1.select(…);我尝试按照u的建议传递整个查询。但是没有结果…仍然是相同的错误。实际上,它无法识别该属性这个stmt.q1.select(postRoot)中的“UserName”。where(cb.equal(postRoot.get(“UserName”),name));你能解释一下为什么它在这种情况下有效吗?再次感谢。首先你应该看看。对于你面临的问题,JPA使用getter/setter约定,getUserName()/setUserName()与UserName相关,而不是UserName。