Hibernate дает sqlgrammarexception при использовании Session для удаления из базы данных. Это показывает, что «из» отсутствует в операторе удаления в спящем режиме, поскольку оператор удаления должен быть удален из таблицы, где column =? но он показывает мне как удалить имя таблицы где столбец = ?. Я просто хочу удалить указанную запись из базы данных, используя hibernate, я получаю имя пользователя и пароль, проверенные с помощью Spring, и, если пароль имени пользователя правильный, затем удаляю пользователя / запись из базы данных, используя hibernate.
Попытка с использованием метода session.delete (a).
protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
doGet(request, response);
PrintWriter out = response.getWriter();
String u = request.getParameter("uname");
String p = request.getParameter("pwd");
String em = request.getParameter("email");
ConfigurableApplicationContext ctx=new
ClassPathXmlApplicationContext("applicationContext.xml");
APTECHDAO dao=(APTECHDAO)ctx.getBean("apt");
List<APTECH> list=dao.getAllAPTECH();
int flag = 0;
for(APTECH g:list) {
if(u.equals(g.USERNAME) && p.equals(g.PASSWORD)) {
flag=1;
((ConfigurableApplicationContext)ctx).close();
list.clear();
//dao).close();
break;
}
else {
flag=0;
}
}
if(flag==1) {
Configuration cfg = new Configuration();
cfg.configure("hibernate.cfg.xml");
SessionFactory factory = cfg.buildSessionFactory();
Session session = factory.openSession();
Object fk=session.load(APTECH.class,new String(u));
APTECH z=(APTECH)fk;
Transaction tx = session.beginTransaction();
session.delete(z);
//session.flush();
tx.commit();
System.out.println("Object deleted successfully.....!!");
session.close();
factory.close();
response.sendRedirect("index.jsp");
}
else {
((ConfigurableApplicationContext)ctx).close();
response.sendRedirect("index.jsp");
}
}
APTECHDAO.java
package sanish;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.ResultSetExtractor;
public class APTECHDAO {
private JdbcTemplate template;
public void setTemplate(JdbcTemplate template) {
this.template = template;
}
public List<APTECH> getAllAPTECH(){
return template.query("select USERNAME,PASSWORD,ROLE from APTECH",new
ResultSetExtractor<List<APTECH>>(){
@Override
public List<APTECH> extractData(ResultSet rs) throws SQLException,
DataAccessException {
List<APTECH> list=new ArrayList<APTECH>();
while(rs.next()){
APTECH e = new APTECH();
e.setUSERNAME(rs.getString(1));
e.setPASSWORD(rs.getString(2));
e.setROLE(rs.getString(3));
list.add(e);
}
return list;
}
});
}
}
hibernate.cfg.xml
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hbm2ddl.auto">update</property>
<property name="dialect">org.hibernate.dialect.DerbyDialect</property>
<property
name="connection.url">jdbc:derby://localhost:1527/sample;
create=true;upgrade= true</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property
name="connection.driver_class">org.apache.derby.jdbc.Clie
ntDriver</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="hibernate.connection.pool_size">10</property>
<property
name="hibernate.current_session_context_class">thread</property>
<mapping class="sanish.APTECH"/>
</session-factory>
</hibernate-configuration>
Журнал ошибок:
Jan 07, 2019 5:35:23 PM org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection
INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@4a40c177] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.
Hibernate:
select
a1_0.USERNAME,
a1_0.EMAIL,
a1_0.PASSWORD,
a1_0.ROLE,
a1_0.SCORE1,
a1_0.SCORE2,
a1_0.SCORE3,
a1_0.SCORE4
from
APTECH as a1_0
where
a1_0.USERNAME=?
Hibernate:
delete APTECH
where
USERNAME=?
Jan 07, 2019 5:35:23 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 20000, SQLState: 42X01
Jan 07, 2019 5:35:23 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: Syntax error: Encountered "APTECH" at line 1, column 8.
Jan 07, 2019 5:35:23 PM org.hibernate.internal.ExceptionMapperStandardImpl mapManagedFlushFailure
ERROR: HHH000346: Error during managed flush [org.hibernate.exception.SQLGrammarException: JDBC exception executing SQL [delete APTECH where USERNAME=?]]
Jan 07, 2019 5:35:23 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [sanish.Delete] in context with path [/Test_Project] threw exception
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: JDBC exception executing SQL [delete APTECH where USERNAME=?]
Это показывает, что синтаксис delete sql неверен.