gpt4 book ai didi

java - JPA 中的 CriteriaBuilder - where 子句

转载 作者:太空宇宙 更新时间:2023-11-04 06:22:41 28 4
gpt4 key购买 nike

我是 JPA 新手。使用 where 子句构建选择查询。我需要从表联系人中选择所有等于字符串名称值的 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;
}

以下是我的 ContactServlet 类代码,我正在尝试编写 CriteriaBuilder 代码。

         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();

......

不知道哪里错了?

以下是执行我的项目时的错误:java.lang.IllegalArgumentException:无法在 org.hibernate.jpa.criteria.path.Abs​​tractPathImpl.unknownAttribute(AbstractPathImpl.java:117) 处解析属性 [UserName] 在 org.hibernate.jpa.criteria.path.Abs​​tractPathImpl.locateAttribute(AbstractPathImpl.java:214) 处的 org.hibernate.jpa.c riteria.path.Abs​​tractPathImpl.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.internal DoFilter(ApplicationFilterChain.java:291) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 在 org.apache.catalina.core.Application FilterChain.doFilter(ApplicationFilterChain.java:206) 在 org.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.catalina.connector.CoyoteAdapter.service(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.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1566) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1523) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 org.apache.tomcat.util.threads.TaskThread$W rappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Thread.java:745)

最佳答案

尝试:

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

UserName 属性的 u 小写。

关于java - JPA 中的 CriteriaBuilder - where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27240294/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com