How to generate Hibernate mapping files & annotation with Hibernate Tools

In this article, we show you how to use Hibernate / JBoss Tools to generate Hibernate mapping files (hbm) and annotation code from database automatically.

Tools in this article

  1. Eclipse v3.6 (Helios)
  2. JBoss / Hibernate Tools v3.2
  3. Oracle 11g
  4. JDK 1.6
Note
Before proceed, please Install Hibernate / JBoss Tools in Eclipse IDE.

1. Hibernate Perspective

Open your “Hibernate Perspective“. In Eclipse IDE, select “Windows” >> “Open Perspective” >> “Others…” , choose “Hibernate“.

2. New Hibernate Configuration

In Hibernate Perspective, right click and select “Add Configuration…

In “Edit Configuration” dialog box,

  1. In “Project” box, click on the “Browse..” button to select your project.
  2. In “Database Connection” box, click “New..” button to create your database settings.
  3. In “Configuration File” box, click “Setup” button to create a new or use existing “Hibernate configuration file”, hibernate.cfg.xml.
Eclipse Hibernate Tools

See your list of your tables in “Hibernate Perspective“.

Eclipse Hibernate Tools

Sample of “hibernate.cfg.xml“, connect to Oracle 11g database.


<?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="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
  <property name="hibernate.connection.url">jdbc:oracle:thin:@127.0.0.1:1521:MKYONG</property>
  <property name="hibernate.connection.username">mkyong</property>
  <property name="hibernate.connection.password">password</property>
  <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
  <property name="hibernate.default_schema">MKYONG</property>
 </session-factory>
</hibernate-configuration>

3. Hibernate Code Generation

Now, you are ready to generate the Hibernate mapping files and annotation codes.

– In “Hibernate Perspective”, click “Hibernate code generation” icon (see below figure) and select “Hibernate Code Generation Configuration”

Hibernate Code Generation

– Create a new configuration, select your “console configuration” (configured in step 2), puts your “Output directory” and checked option “Reverse engineer from JDBC Connection“.

Hibernate Code Generation

– In “Exporter” tab, select what you want to generate, Model , mapping file (hbm) , DAO, annotation code and etc.

Hibernate Code Generation

See result

Hibernate Code Generation
Note
The generated Hibernate mapping file and annotations code are very clean, standard and easy to modify. Try explore more features.
author image

mkyong

Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter. If you like my tutorials, consider make a donation to these charities. Read all published posts by

Comments

avatar
newest oldest most voted
saideep puppala
Guest
saideep puppala

Thank so much…
i am able to generate pojo classes but, in that pojo classes annotations are not generating

Hicham
Guest
Hicham

I had also this problem.
To solve it, check the “Generate EJB3 annotations” in the “Exporter” tab, in the Hibernate code generation window.

rahul bansal
Guest
rahul bansal

After cheking also facing same issue

joelmmx
Guest
joelmmx

The same for me. The annotation are not coming in the java File. I don’t know what is wrong

joelmmx
Guest
joelmmx

I found in stackoverflow the problem, you cannot use 5.4 or 5.3 hibernate version. Try to use 5.2 version hibernate in the comebox when you create console hibernate configuration

trackback
Quick start Maven + Hibernate + MySQL Example | Hibernate

[…] – Create the model class and mapping files are quite tedious in large application, With Hibernate tools, this can be generate automatically, check this article – Hibernate tools to generate it automatically. […]

Simple
Guest
Simple

Thank you, it’s interesting.
Can we change the strategy of code generation for inheritance?

trackback
How to install Hibernate Tools in Eclipse IDE | Hibernate

[…] Follow up : How to generate code with Hibernate Tools […]

ano
Guest
ano

can u tell me about setting up using the oracle 10g

Koki
Guest
Koki

I have a question.
How do I automatically generate tag on hibernate mapping file with hibernate tools?

sql-insert
sql-delete
sql-update

Sayeesh
Guest
Sayeesh

This is exactly what i was looking for..

Thank you very much… Very neatly described…

Lusine
Guest
Lusine

How to generate annotated hibernate entities?

MIchael
Guest
MIchael

HI,

I am currently working on a project. Which uses JSPs and stored procedure to populate the dropdown. I want to use hibernate. Ca I know what modificatioins I need to do ?

Thanks..

saurabh jain
Guest
saurabh jain

sir I m yu great fan. I learn many things from yu site.

thanks sir vo bhi bada wala…

tomek
Guest
tomek

Hi, i have problem with domains in my db, Hibernate dont see them, so i cant generate anything. For example i have column USER_ID : public.id

Mythili
Guest
Mythili

Thank You.
Your website with it’s well documented steps on so many areas is very helpful.

Regards,
Mythili

Arpit
Guest
Arpit

Sir ,

i got 2 kind of error after updating plugin. Actually tomcat server is giving me two error .below mentioned.
———————————————————-

Error 1 : An internal error occurred during: “Starting Tomcat v6.0 Server at localhost”.

java.lang.NoSuchMethodError: org.eclipse.wst.server.core.model.ServerBehaviourDelegate.getTempDirectory(Z)Lorg/eclipse/core/runtime/IPath;
at org.eclipse.jst.server.tomcat.core.internal.TomcatServerBehaviour.getTempDirectory(TomcatServerBehaviour.java:620)
at org.eclipse.jst.server.tomcat.core.internal.TomcatVersionHelper.getStandardBaseDirectory(TomcatVersionHelper.java:154)
at org.eclipse.jst.server.tomcat.core.internal.Tomcat60Handler.getRuntimeBaseDirectory(Tomcat60Handler.java:112)
at org.eclipse.jst.server.tomcat.core.internal.TomcatServer.getRuntimeBaseDirectory(TomcatServer.java:316)
at org.eclipse.jst.server.tomcat.core.internal.TomcatServerBehaviour.getRuntimeBaseDirectory(TomcatServerBehaviour.java:103)
at org.eclipse.jst.server.tomcat.core.internal.TomcatServerBehaviour.getRuntimeProgramArguments(TomcatServerBehaviour.java:115)
at org.eclipse.jst.server.tomcat.core.internal.TomcatServerBehaviour.setupLaunchConfiguration(TomcatServerBehaviour.java:833)
at org.eclipse.wst.server.core.internal.Server.setupLaunchConfiguration(Server.java:1440)
at org.eclipse.wst.server.core.internal.Server.getLaunchConfiguration(Server.java:1526)
at org.eclipse.wst.server.core.internal.Server.startImpl2(Server.java:3048)
at org.eclipse.wst.server.core.internal.Server.startImpl(Server.java:3001)
at org.eclipse.wst.server.core.internal.Server$StartJob.run(Server.java:300)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)

————————————————————————————
Error 2 :An internal error occurred during: “Publishing to Tomcat v6.0 Server at localhost…”.

java.lang.NoSuchMethodError: org.eclipse.wst.server.core.model.ServerBehaviourDelegate.getTempDirectory(Z)Lorg/eclipse/core/runtime/IPath;
at org.eclipse.jst.server.tomcat.core.internal.TomcatServerBehaviour.getTempDirectory(TomcatServerBehaviour.java:620)
at org.eclipse.jst.server.tomcat.core.internal.TomcatVersionHelper.getStandardBaseDirectory(TomcatVersionHelper.java:154)
at org.eclipse.jst.server.tomcat.core.internal.Tomcat60Handler.getRuntimeBaseDirectory(Tomcat60Handler.java:112)
at org.eclipse.jst.server.tomcat.core.internal.TomcatServer.getRuntimeBaseDirectory(TomcatServer.java:316)
at org.eclipse.jst.server.tomcat.core.internal.TomcatServerBehaviour.getRuntimeBaseDirectory(TomcatServerBehaviour.java:103)
at org.eclipse.jst.server.tomcat.core.internal.PublishOperation2.(PublishOperation2.java:50)
at org.eclipse.jst.server.tomcat.core.internal.PublishTask.getTasks(PublishTask.java:34)
at org.eclipse.wst.server.core.internal.PublishTask.getTasks(PublishTask.java:89)
at org.eclipse.wst.server.core.internal.Server.getTasks(Server.java:1186)
at org.eclipse.wst.server.core.model.ServerBehaviourDelegate.getTasks(ServerBehaviourDelegate.java:1055)
at org.eclipse.wst.server.core.model.ServerBehaviourDelegate.publish(ServerBehaviourDelegate.java:834)
at org.eclipse.wst.server.core.model.ServerBehaviourDelegate.publish(ServerBehaviourDelegate.java:708)
at org.eclipse.wst.server.core.internal.Server.publishImpl(Server.java:2731)
at org.eclipse.wst.server.core.internal.Server$PublishJob.run(Server.java:278)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)

————————————————————————
please sir help me what to do ..please solve my error & guide me.

Hanifa
Guest
Hanifa

SIr,

Hanifa
Guest
Hanifa

Sir,
I am having a common Database and I need to create annotations for only specific tables. How can I acheive this?

Mohit
Guest
Mohit
Ela Cazacu
Guest
Ela Cazacu

Hello,
I am trying to run the mapping tool using a hibernate.reveng.xml file.
The problem is that nothing gets generated and I get no error messages either.
Do you know where I can find information (logs) about what went wrong?
Thank you!

Prem
Guest
Prem

Am having the same issue. I ran the Hibernate Code Generation configurations to generate the POJO classes and the corresponding mapping files. But nothing happens. No error messages.

srinivas pamula
Guest
srinivas pamula

Hi sir, i am watching ur wesite,
which is helping me a lot.
thank u sir.

Prasad Isuru
Guest
Prasad Isuru

Thank You sir,Your all posts very use full …

mathaker
Guest
mathaker

Sir,

I am learning hibernate. I have tried your tutorial in both Eclipse and NB.
I just have two question.
Q-1. As you said NB is slow, can you tell us how?
Q-2. If I add one more column in DBUser table, will it reflect automatically in hbm file and pojo? If not then I have to change mannually.

trackback
Maven 3 + Hibernate 3.6 + Oracle 11g Example (XML Mapping)

[…] File : DBUser.java package com.mkyong.user;   import java.util.Date;   /** * Dbuser generated by hbm2java */ public class DBUser implements java.io.Serializable {   private int userId; private String username; private String createdBy; private Date createdDate;   public DBUser() { }   public DBUser(int userId, String username, String createdBy, Date createdDate) { this.userId = userId; this.username = username; this.createdBy = createdBy; this.createdDate = createdDate; }   public int getUserId() { return this.userId; }   public void setUserId(int userId) { this.userId = userId; }   public String getUsername() { return this.username; }   public void setUsername(String username) { this.username = username;… Read more »

Jeremy
Guest
Jeremy

The “hibernate.default_schema” value HAS to be all uppercase or else you will never be able to connect to the database and there will be no errors as to why (Even though the ‘Test Connection’ is successful). Took me a long time to find that out, so I’m posting it here in case someone needs the solution.

Anderson
Guest
Anderson

Thanks, before your tip I couldn’t see the table list.

Khanh
Guest
Khanh

Thank you very much:))

Nicks
Guest
Nicks

Thanks for this comment, even i spent a lot of time for this

mohsin azeem
Guest
mohsin azeem

hey mkyong i like your web so much i also like your way of solving a problem… greate thumbs up!!
my Question is that.
1. if i have added new table to DB how can i create pojo class for single table ? by hibernate tool
2. if i change any column’s property or add new column to table how can i change it in POJO class automatically
THANKS 🙂

kaanchanha
Guest
kaanchanha

very much explanatory . thanks a lot !!!

Radek
Guest
Radek

Hi,

I am following this tutorial but the Hibernate Configuration does not open the table list in the Database item and no error is appear in console. I have tried connect to database with Database Development persitance in Eclipse and it works with my configuration and I have got the list of tables. I am using postgresql driver and create simple Java Project. Do have some advice?

vj
Guest
vj

i followed the steps you said, but while trying to generate mapping files and pojo classses it is throwing an exception org.hibernate.cfg.jdbcbinder Exception and it says Duplicate class name ‘Syscatalog’ generated for ‘org.hibernate.mapping.Table(SYS.SYSCATALOG_)’. Same name where generated for org.hibernate.mapping.Table(SYS.SYSCATALOG_)

Akin
Guest
Akin

did you get a fix?

Freddie
Guest
Freddie

I have the same problem, any idea?

mintu
Guest
mintu

how i can set perspective for hibernate
because that not showing hibernate code generation configuration in my eclipse
thanks

shivarul
Guest
shivarul

Exception in thread “main” java.lang.Error: Unresolved compilation problem:
The method getCurrentSession() is undefined for the type SessionFactory

at com.person.testperson.main(testperson.java:18)

getting this error wht to do tel me 🙂

regards
shivarul

DrakoFire
Guest
DrakoFire

Hi mkyong, nice tutorial! good job, I have a question, if I have my tables with the prefix “namewebapp_” in my database, but the Hibernate Tools generates NamewebappAnybean (obviously), for example: I have a table with name “namewebapp_customers”, the Hibernate Tools generates my JavaBeans with the NamewebappCustomers class name , but I want the name for my JavaBean be only Customers, Is there any configuration to do this?

Regards!

Yusuf
Guest
Yusuf

how to configure db setting? i want to use postgresql, how i can add postgresql database driver?

Hasan
Guest
Hasan

Hi,
I have a database in mssql. One of this tables is “dbo.city” and the other one is “dbo._city”. I try to generate classes but i have a duplication problem. I think it’s about name strategy.
“dbo.city” and “dbo._city” generated with same class name.
Can you help me?
Thanks