How to enable postgresql in hibernate.cfg.xml file

I am trying to insert some data into postgresql through sleep mode. However, there is not much tutorial on configuring hibernate with postgresql (I know it should look like mysql =))

Src / main / resources / hibernate.cfg.xml

<hibernate-configuration> <session-factory> <property name="connection.driver_class">org.postgresql.Driver</property> <property name="connection.url">jdbc:postgresql://127.0.0.1:5432/myDatabase</property> <property name="connection.username">myUser</property> <property name="connection.password">myPassword</property> <!-- JDBC connection pool (use the build-in) --> <property name="connection.pool_size">1</property> <!-- SQL dialect --> <property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property> <property name="cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property> <property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property> <!-- thread is the short name for org.hibernate.context.ThreadLocalSessionContext --> <property name="current_session_context_class">thread</property> <!-- Set "true" to show SQL statements --> <property name="hibernate.show_sql">true</property> <!-- mapping class using annotation --> <mapping class="com.hib.entities.Student"></mapping> </session-factory> </hibernate-configuration> 

SRC / Basic / Java /

 package com.hib.init; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistryBuilder; public class Hibernateutil { private static final SessionFactory sessionF; private static final ServiceRegistry serviceR; static { Configuration conf = new Configuration(); conf.configure(); System.out.println("Begin"); serviceR = new ServiceRegistryBuilder().applySettings(conf.getProperties()).buildServiceRegistry(); System.out.println("Ready???"); try { sessionF = conf.buildSessionFactory(serviceR); System.out.println("Success??"); }catch(Exception e) { throw new ExceptionInInitializerError(e); } } public static SessionFactory getSeeionFactory() { return sessionF; } } 

SRC / Main / Java package com.hib.entities;

 import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table public class Student { @Id @GeneratedValue private Integer id; private String firstName; private Integer age; public Student() {} public Student(Integer id, String firstName, Integer age) { super(); this.id = id; this.firstName = firstName; this.age = age; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } } 

SRC / Basic / Java

 package com.hib.demo; import org.hibernate.Session; import org.hibernate.SessionFactory; import com.hib.entities.Student; import com.hib.init.Hibernateutil; public class DemoFirst { public static void main(String[] args) { SessionFactory sessionFactory = Hibernateutil.getSeeionFactory(); Session session = sessionFactory.openSession(); session.beginTransaction(); Student student = new Student(); student.setFirstName("Bob"); student.setAge(26); session.save(student); session.getTransaction().commit(); session.close(); } } 

And this is the error I received:

 Success?? Hibernate: select nextval ('hibernate_sequence') Aug 12, 2014 11:01:10 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions WARN: SQL Error: 0, SQLState: 42P01 Aug 12, 2014 11:01:10 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions ERROR: ERROR: relation "hibernate_sequence" does not exist Position: 17 Exception in thread "main" org.hibernate.exception.SQLGrammarException: ERROR: relation "hibernate_sequence" does not exist Position: 17 at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:122) at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110) at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:129) at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81) at com.sun.proxy.$Proxy9.executeQuery(Unknown Source) at org.hibernate.id.SequenceGenerator.generateHolder(SequenceGenerator.java:123) at org.hibernate.id.SequenceGenerator.generate(SequenceGenerator.java:116) at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:120) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:204) at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:189) at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:642) at org.hibernate.internal.SessionImpl.save(SessionImpl.java:635) at org.hibernate.internal.SessionImpl.save(SessionImpl.java:631) at com.hib.demo.DemoFirst.main(DemoFirst.java:20) Caused by: org.postgresql.util.PSQLException: ERROR: relation "hibernate_sequence" does not exist Position: 17 at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2062) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1795) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:479) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:367) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:271) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122) ... 14 more 

pom.xml

  <dependency> <groupId>postgresql</groupId> <artifactId>postgresql</artifactId> <version>8.4-701.jdbc4</version> </dependency> 
+2
java spring database postgresql hibernate
source share
5 answers

According to this thread, you should set the Id annotation as follows:

 @GeneratedValue(strategy = GenerationType.IDENTITY) 
+3
source share

You forgot to add the DDL generation property. You can use any of the following settings:

 <property name="hibernate.hbm2ddl.auto" value="update"> <property name="hibernate.hbm2ddl.auto" value="create"> <property name="hibernate.hbm2ddl.auto" value="create-drop"> 
  • the update will create and then just update the DDL schema
  • create is going to create a schema if it does not exist
  • create-drop will create the schema when initializing the SessionFactory and destroy when the SessionFactory is destroyed. This is useful when testing integration.
+2
source share

You have to do a beetwen mapping of the table-object-class, column field. For example (a table and columns must exist):

 @Entity @Table(name = "student") public class Student { @Id @GeneratedValue @Column(name = "id") private Integer id; @Column(name = "first_name") private String firstName; @Column(name = "age") private Integer age; 
+1
source share

Since you are using @GeneratedValue ()

It will look for how the database you are using generates identifiers. For MySql or HSQSL, there are additional fields that automatically increase. In Postgres or Oracle, they use sequence tables. Since you did not specify a sequence table name, it will look for a sequence table with the name hibernate_sequence and use it by default. Thus, you probably do not have such a sequence table in your database, and now you will get this error.

Or add hibernate_sequence as

 @GeneratedValue(strategy=SEQUENCE) 

or your own sequence table and use annotations to name your sequence table that you like

 @GeneratedValue(strategy=SEQUENCE, generator="student_id_seq") 

Hope that helps

0
source share

Connect to Postgresql via Hibernate -> configuration in the hibernate.cfg.xml file will be:

 <session-factory> <!-- SQL dialect --> <!-- <property name="dialect">org.hibernate.dialect.H2Dialect</property> --> <!-- Database connection settings --> <property name="hibernate.connection.driver_class">org.postgresql.Driver</property> <property name="connection.url">jdbc:postgresql://localhost:5432/db_name</property> <property name="connection.username">username</property> <property name="connection.password">db_assword</property> <!-- JDBC connection pool (use the built-in) --> <property name="connection.pool_size">1</property> <!-- Disable the second-level cache --> <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.auto">update</property> <!-- <property name="hbm2ddl.auto">validate</property> --> <!-- The mapping information of entities --> <!-- <mapping class="hibernate_example.envers.Book" /> --> <!-- <mapping class="hibernate_example.envers.Student" /> --> <!-- <mapping class="hibernate_example.envers.AuditEntity" /> --> </session-factory> 

0
source share

All Articles