An error occurs when trying to execute a query to the database. Connection with the base is carried out without exceptions. The installation of the session factory and the execution of requests are handled by the class:
public class DBService { private static final String hibernate_show_sql = "true"; private static final String hibernate_hbm2ddl_auto = "Update"; private final SessionFactory sessionFactory; public DBService() { Configuration configuration = getH2Configuration(); sessionFactory = createSessionFactory(configuration); } @SuppressWarnings("UnusedDeclaration") private Configuration getH2Configuration() { Configuration configuration = new Configuration(); configuration.addAnnotatedClass(UsersDataSet.class); configuration.setProperty("hibernate.dialect", "org.hibernate.dialect.H2Dialect"); configuration.setProperty("hibernate.connection.driver_class", "org.h2.Driver"); configuration.setProperty("hibernate.connection.url", "jdbc:h2:~/test"); configuration.setProperty("hibernate.connection.username", "sa"); configuration.setProperty("hibernate.connection.password", "sa"); configuration.setProperty("hibernate.show_sql", hibernate_show_sql); configuration.setProperty("hibernate.hbm2ddl.auto", hibernate_hbm2ddl_auto); return configuration; } public UsersDataSet getUser(long id) throws DBException { try { Session session = sessionFactory.openSession(); UsersDAO dao = new UsersDAO(session); UsersDataSet dataSet = dao.get(id); session.close(); return dataSet; } catch (HibernateException e) { throw new DBException(e); } } public UsersDataSet getUser(String login) throws DBException { try { Session session = sessionFactory.openSession(); UsersDAO dao = new UsersDAO(session); Long id = dao.getUserId(login); UsersDataSet dataSet = dao.get(id); session.close(); return dataSet; } catch (NullPointerException q) { throw q; }catch (HibernateException e) { throw new DBException(e); } } public long addUser(String login,String password) throws DBException { try { Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); UsersDAO dao = new UsersDAO(session); long id = dao.insertUser(login,password); transaction.commit(); session.close(); return id; } catch (HibernateException e) { throw new DBException(e); } } public void printConnectInfo() { try { SessionFactoryImpl sessionFactoryImpl = (SessionFactoryImpl) sessionFactory; Connection connection = sessionFactoryImpl.getConnectionProvider().getConnection(); System.out.println("DB name: " + connection.getMetaData().getDatabaseProductName()); System.out.println("DB version: " + connection.getMetaData().getDatabaseProductVersion()); System.out.println("Driver: " + connection.getMetaData().getDriverName()); System.out.println("Autocommit: " + connection.getAutoCommit()); } catch (SQLException e) { e.printStackTrace(); } } private static SessionFactory createSessionFactory(Configuration configuration) { StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder(); builder.applySettings(configuration.getProperties()); ServiceRegistry serviceRegistry = builder.build(); return configuration.buildSessionFactory(serviceRegistry); } } Next, on the DBService I call the addUser("User", "pass" ) method, in the body of which insertUser("User", "pass" ) of the UserDao object is called
DBService:
public long addUser(String login,String password) throws DBException { try { Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); UsersDAO dao = new UsersDAO(session); long id = dao.insertUser(login,password); transaction.commit(); session.close(); return id; } catch (HibernateException e) { throw new DBException(e); } } UsersDao:
public long insertUser(String login, String password) throws HibernateException { return (Long) session.save(new UsersDataSet(login,password)); } Class UseresDataSet
@Entity @Table(name = "users") public class UsersDataSet implements Serializable{ private static final long serialVersionUID = -8706689714326132798L; @Id @Column(name = "id") @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; @Column(name = "login", unique = true, updatable = false) private String login; @Column(name = "psaword", updatable = false) private String pasword; //Important to Hibernate! @SuppressWarnings("UnusedDeclaration") public UsersDataSet() { } @SuppressWarnings("UnusedDeclaration") public UsersDataSet(long id, String login) { this.setId(id); this.setPasword(login); } public UsersDataSet(String login, String pasword) { this.setId(-1); this.setlogin(login); this.setPasword(pasword); } public void setlogin(String login) { this.login=login; } public void setPasword(String pasword) { this.pasword = pasword; } public long getId() { return id; } public void setId(long id) { this.id = id; } @Override public String toString() { return "UserDataSet{" + "id=" + id + ", login='" + login + "password= "+ pasword+ '\'' + '}'; } } in the column writes that initially Exception flies from insertUser
січ. 18, 2016 4:27:37 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions WARN: SQL Error: 42102, SQLState: 42S02 січ. 18, 2016 4:27:37 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions ERROR: Таблица "USERS" не найдена Table "USERS" not found; SQL statement: insert into users (id, login, pasword) values (null, ?, ?) [42102-187] dbService.DBException: org.hibernate.exception.SQLGrammarException: could not prepare statement at dbService.DBService.addUser(DBService.java:125) at servlets.SignUpServlet.doPost(SignUpServlet.java:42) UPD. When using Postgres
Configuration configuration = getPostgresConfiguration; sessionFactory = createSessionFactory(configuration); everything is successful
pom. xml:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>L2.1</groupId> <artifactId>L2.1</artifactId> <version>1.0</version> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <outputDirectory>${basedir}</outputDirectory> <finalName>server</finalName> <appendAssemblyId>false</appendAssemblyId> <archive> <manifest> <mainClass>main.Main</mainClass> </manifest> </archive> </configuration> </plugin> </plugins> </build> <properties> <com.h2database.h2.version>1.4.187</com.h2database.h2.version> <mysql.mysql-connector-java.version>5.1.35</mysql.mysql-connector-java.version> <org.hibernate.hibernate-core.version>4.3.10.Final</org.hibernate.hibernate-core.version> </properties> <dependencies> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-server</artifactId> <version>9.3.0.M0</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-webapp</artifactId> <version>9.3.0.M0</version> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>postgresql</groupId> <artifactId>postgresql</artifactId> <version>9.1-901.jdbc4</version> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>${com.h2database.h2.version}</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>${org.hibernate.hibernate-core.version}</version> </dependency> </dependencies> </project>