Я новичок в JPA. Построение запроса select с предложением where. Мне нужно выбрать из таблицы Contacts all ContactName, равную значению имени String.
Для создания таблицы DB используется следующий код:
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;
@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.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.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.Applicat ionFilterChain.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) at 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) at org.apache.coyote.http11.Http11NioProtocol $ Http11ConnectionHandle r.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 $ WrappingRunnable.run(TaskThread.java:61) в java.lang.Thread.run(Thread.java:745)
Попробуйте:
q1.select(postRoot).where(cb.equal(postRoot.get("userName"), name));
Итрибут u атрибута UserName в нижнем регистре.