Create new JBoss Tools Documentation Jira issue

This will launch the Jboss Tools Jira page - to complete your feedback please login if needed, and submit the Jira.

JBoss.orgCommunity Documentation

Chapter 4. Eclipse Plugins

4.1. Introduction
4.1.1. Download base project
4.2. Creating a Hibernate Mapping File
4.3. Creating a Hibernate Configuration File
4.4. Hibernate Console Configuration
4.4.1. Creating a Hibernate Console Configuration
4.4.2. Modifying a Hibernate Console Configuration
4.4.3. Closing Hibernate Console Configuration
4.5. Reverse Engineering and Code Generation
4.5.1. Code Generation Launcher
4.5.2. Exporters
4.6. Hibernate Mapping and Configuration File Editor
4.6.1. Java property/class completion
4.6.2. Table/Column completion
4.6.3. Configuration property completion
4.7. Structured Hibernate Mapping and Configuration File Editor
4.8. JBoss Tools Properties Editor
4.9. Reveng.xml Editor
4.10. Hibernate Console Perspective
4.10.1. Viewing the entity structure
4.10.2. Prototyping Queries
4.10.3. Properties View
4.11. Hibernate:add JPA annotations refactoring
4.12. Enable debug logging in the plugins
4.12.1. Relevant Resources Links
4.13. Hibernate support for Dali plugins in Eclipse WTP
4.13.1. Creating JPA project with Hibernate support
4.13.2. Generating DDL and Entities
4.13.3. Hibernate Annotations Support
4.13.4. Relevant Resources Links

This chapter will introduce you to the functionality that Hibernate Tools provide within Eclipse. That is a set of wizards and editors for simplifying the work with Hibernate.

Hibernate Eclipse Tools include wizards for creating Hibernate mapping files, configuration files (.cfg.xml), revenge.xml as well as wizards for adjusting Console Configuration and Code Generation. Special structured and XML editors, editors for executing HQL and Criteria queries are also provided in Hibernate Console. Refer to Key Features section to find all benefits that you can take advantage of while using the tools within Eclipse.

Note:

Please note that these tools do not try to hide any functionality of Hibernate. The tools make working with Hibernate easier, but you are still encouraged/required to read the Hibernate Documentation to fully utilize Hibernate Tools and especially Hibernate it self.

Hibernate mapping files are used to specify how your objects are related to database tables.

To create basic mappings for properties and associations, i. e. generate .hbm.xml files, Hibernate Tools provide a basic wizard which you can bring up by navigating New > Hibernate XML mapping file.

At first you'll be asked to select a package or multiple individual classes to map. It's also possible to create an empty file, don't select any packages or classes and an empty .hbm will be created in the specified location

With depth control option you can define dependences depth for choosing classes (it means to set level of references which is used to collect linked classes to the selection).


The next wizard page lists the mappings to be generated. As you see Customers, Orders, Productlines and Products classes added under depth control driving.


This wizard page outputs a generated .hbm files preview.


Pressing Finish creates the files.

To be able to reverse engineer, prototype queries, and of course to simply use Hibernate Core a hibernate.properties or hibernate.cfg.xml file is needed. The Hibernate Tools provide a wizard for generating the hibernate.cfg.xml file if you do not already have such one.

Start the wizard by clicking New > Other (Ctrl+N) , then Hibernate > Hibernate Configuration File (cfg.xml) and press Next or on a web Seam project in the Web Projects view WebContent -> New -> File -> Hibernate Configuration 3.0 . After selecting the wanted location for the hibernate.cfg.xml file, you will see the following page:


Note:

The contents in the combo boxes for the JDBC driver class and JDBC URL change automatically, depending on the Dialect and actual driver you have chosen.

Enter your configuration information in this dialog. Details about the configuration options can be found in Hibernate Reference Documentation.

Press Finish to create the configuration file, after optionally creating a Console configuration, the hibernate.cfg.xml will be automatically opened in an editor. The last option Create Console Configuration is enabled by default and when enabled, it will automatically use the hibernate.cfg.xml for the basis of a Console configuration.

A Console configuration describes how the Hibernate plugin should configure Hibernate and what configuration files, including which classpath are needed to load the POJO's, JDBC drivers etc. It is required to make usage of query prototyping, reverse engineering and code generation. You can have multiple named console configurations. Normally you would just need one per project, but more is definitely possible if your project requires this.

You can create a console configuration by running the Console Configuration Wizard, shown in the following screenshot. The same wizard will also be used if you are coming from the hibernate.cfg.xml wizard and had enabled Create Console Configuration .

The dialog consists of five tabs:


The following table describes the available settings on the Main tab. The wizard can automatically detect the default values for most of them if you started the wizard with the relevant java project or resource selected.


Tip:

The two latter settings are usually not required if you specify a project and it has /hibernate.cfg.xml or /META-INF/persistence.xml in its project classpath.

  • Options for the additional/optional settings


The next table describes Hibernate Console Configuration options available on the Options tab.


  • Classpath for classpath


The following table specifies the parameters of the Classpath tab of the wizard.


  • Mappings for additional mappings


Parameters of the Mappings tab of the Hibernate Console Configuration wizard are explained below:


  • and the last tab Common


It allows to define general aspects of the launch configuration including storage location, console encoding and some others.

Clicking Finish creates the configuration and shows it in the Hibernate Configurations view.


When you created a hibernate console configuration you can modify it in 2 ways:

A "click-and-generate" reverse engineering and code generation facility is available. This facility allows you to generate a range of artifacts based on database or an already existing Hibernate configuration, be that mapping files or annotated classes. Some of these are POJO Java source file, Hibernate .hbm.xml , hibernate.cfg.xml generation and schema documentation.

To start working with this process, start the Hibernate Code Generation which is available in the toolbar via the Hibernate icon or via the Run > Hibernate Code Generation menu item.

When you click on Open Hibernate Code Generation Dialog... the standard Eclipse launcher dialog will appear. In this dialog you can create, edit and delete named Hibernate code generation "launchers".



The first time you create a code generation launcher you should give it a meaningful name, otherwise the default prefix New_Generation will be used.

Tip:

The "At least one exporter option must be selected" is just a warning stating that for this launch to work you need to select an exporter on the Exporter tab. When an exporter has been selected the warning will disappear.

The dialog also have the standard tabs Refresh and Common that can be used to configure which directories should be automatically refreshed and various general settings launchers, such as saving them in a project for sharing the launcher within a team.

On the Main tab you see the following fields:

Table 4.6. Code generation "Main" tab fields

Field

Description

Console Configuration

The name of the console configuration which should be used when code generating

Output directory

Path to a directory where all output will be written by default. It's possible to enter absolute directory path, for example - "d:/temp". Be aware that existing files will be overwritten, so be sure to specify the correct directory.

Reverse engineer from JDBC Connection

If enabled, the tools will reverse engineer the database available via the connection information in the selected Hibernate Console Configuration and generate code based on the database schema. If not enabled, the code generation will just be based on the mappings already specified in the Hibernate Console configuration.

Package

The package name here is used as the default package name for any entities found when reverse engineering

reveng.xml

Path to a reveng.xml file. A reveng.xml file allows you to control certain aspects of the reverse engineering. e.g. how jdbc types are mapped to hibernate types and especially important which tables are included/excluded from the process. Clicking "setup" allows you to select an existing reveng.xml file or create a new one. See more details about the reveng.xml file in Chapter 6, Controlling reverse engineering.

reveng. strategy

If reveng.xml does not provide enough customization you can provide your own implementation of an ReverseEngineeringStrategy. The class needs to be in the classpath of the Console Configuration, otherwise you will get class not found exceptions. See Section 6.3, “Custom strategy” for details and an example of a custom strategy.

Generate basic typed composite ids

A table that has a multi-column primary key a <composite-id> mapping will always be created. If this option is enabled and there are matching foreign-keys each key column is still considered a 'basic' scalar (string, long, etc.) instead of a reference to an entity. If you disable this option a <key-many-to-one> instead. Note: a <many-to-one> property is still created, but is simply marked as non-updatable and non-insertable.

Detect optimistic lock columns

Automatically detect optimistic lock columns. Controllable via reveng. strategy; the current default is to use columns named VERSION or TIMESTAMP.

Detect many-to-many tables

Automatically detect many-to-many tables. Controllable via reveng. strategy.

Detect one-to-one associations

Reverse engineering detects one-to-one associations via primary key and both hbm.xml and annotation generation generates the proper code for it.

The detection is enabled by default (except for Seam 1.2 and Seam 2.0) reverse engineering. For Hibernate Tools generation there is a checkbox to disable if not wanted.

Use custom templates

If enabled, the Template directory will be searched first when looking up the templates, allowing you to redefine how the individual templates process the hibernate mapping model.

Template directory

A path to a directory with custom templates


The Exporters tab is used to specify which type of code that should be generated. Each selection represents an Exporter that is responsible for generating the code, hence the name.


The following table describes in short the various exporters. Remember you can add/remove any Exporters depending on your needs.


Each Exporter listens to certain properties and these can be setup in the Properties section where you can add/remove predefined or customer properties for each of the exporters. The following table lists the time of writing predefined properties:


To add a property to the chosen Exporter click the Add button in the Properties section. In the appeared dialog you should select the property from the proposed list and the value for it.


Tip:

If the property is a directory, it is possible to browse directories in the Value field.


The Hibernate Mapping File editor provides XML editing functionality for the hbm.xml and cfg.xml files. The editor is based on the Eclipse WTP tools and extends its functionality to provide Hibernate specific code completion.


The structured editor represents the file in the tree form. It also allows to modify the structure of the file and its elements with the help of tables provided on the right-hand area.

To open any mapping file in the editor, choose Open With > Hibernate 3.0 XML Editor option from the context menu of the file. The editor should look as follows:


For the configuration file you should choose Open With > Hibernate Configuration 3.0 XML Editor option.


The editor is meant for editing .properties files. It contains two tabs: the Properties (UI) tab and the Source tab for manual editing.

For hibernate.properties file JBoss Tools Properties Editor provides content assist which is available both for hibernate properties and property values. You can make use of the content assist while editing the file in the Source view and in the Properties view of the editor.

To add the property in the Properties view, click the Add button.


In the Name field press Ctrl+Space to invoke the content assist. It will suggest 'hibernate.' which is the prefix for all hibernate properties. After selecting 'hibernate.' and invoking the content assist again, other prefixes and properties are displayed as the proposals with a description of each one.


When invoking the content assist in the Value field, it also provides a list of proposals.


In the Source view of the editor, content assist also could be invoked both for properties names and values:



A reveng.xml file is used to customize and control how reverse engineering is performed by the tools. The plugins provide an editor to ease the editing of this file and hence used to configure the reverse engineering process.

The editor is intended to allow easy definition of type mappings, table include/excludes and specific override settings for columns, e.g. define an explicit name for a column when the default naming rules are not applicable.

The editor is activated as soon as an .reveng.xml file is opened. To get an initial reveng.xml file the Reverse Engineering File Wizard can be started via Ctrl+N and Hibernate > Hibernate Reverse Engineering File (reveng.xml) then.


Or you can get it via the Code Generation Launcher by checking the proper section in the Main tab of the Hibernate Code Generation Wizard.

The following screenshot shows the Overview page where the wanted console configuration is selected (auto-detected if Hibernate 3 support is enabled for the project)


The Table Filter page allows you to specify which tables to include and exclude. Pressing Refresh shows the tables from the database that have not yet been excluded.


The Type Mappings page is used for specifying type mappings from JBDC types to any Hibernate type (including usertypes) if the default rules are not applicable. Here again to see the database tables press Refresh button underneath. More about type mappings you can find further in the Type Mappings section.


The Table and Columns page allows you to explicit set e.g. which hibernatetype and propertyname that should be used in the reverse engineered model. For more details on how to configure the tables while reverse engineering read the Specific table configuration section.


Now that you have configured all necessary parts, you can learn how to work with Hibernate Console Perspective.

The Hibernate Console Perspective combines a set of views which allow you to see the structure of your mapped entities/classes, edit HQL queries, execute the queries, and see the results. To use this perspective you need to create a Console configuration.

To view your new configuration and entity/class structure, switch to Hibernate Configurations View. Expanding the tree allows you to browse the class/entity structure and see the relationships.


The Console Configuration does not dynamically adjust to changes done in mappings and java code. To reload the configuration select the configuration and click the Reload button in the view toolbar or in the context menu.

Besides, it's possible to open source and mapping files for objects showed in Hibernate Configurations View. Just bring up the context menu for a necessary object and select Open Source File to see appropriate Java class or Open Mapping File to open a proper .hbm.xml.


In order to get a visual feel on how entities are related as well as view their structures, a Mapping Diagram is provided. It is available by right clicking on the entity you want a mapping diagram for and then choosing Mapping Diagram.


To make Mapping Diagram usage easier you can use Rules, Grid,Snap to Geometry checkboxes in the View menu.


If you will select Rules checkbox, the view print page scale will be added to the page. The numbers on the scale show its size in inches.If you click on the scale a Ruler Guide will appear on the diagram. You can connect any diagram item to it.To connect the items you should move their tops to the Ruler Guide. And while moving the ruler guide, the items will be moved together with it as a whole.


If you'll select Grid checkbox, the grid will appear on the diagram.


The checkbox Snap to Geometry helps to put the items of the diagram into allineation with the grid.

For better navigating through the diagram use Outline view which is available in the structural and graphical modes.


To switch over between the modes use the buttons in the top-right corner of the Outline view.


The options in the context menu of the mapping diagram are listed in the next table.


When you open the context menu while clicking an item on the diagram, it quite differs from the one described before.


The next table describes all the extra options in the menu of mapping items:


Tip:

All the described types of the context menu are also available in the Outline view.

The below table lists the actions that could be performed using the keyboard keys (or keys combinations).


It's possible to save the diagram in the eclipse workspace. Click the usual File > Save As option, the wizard will ask you to set the location within you project where to save the file and give the name for the diagram. The item's names concatenated with the ampersand symbols are set as the default name for a diagram. The file is saved with the .hibernate extension.


Note:

If you restart the Eclipse with the mapping diagram opened, the mapping diagram will be restored with the message like on the figure below. To view the diagram content, you should perform the refreshing.



There are some useful commands in the toolbar.


They are described in the table below.


Queries can be prototyped by entering them into the HQL or Criteria Editor. To execute a query you should click the green run button in the editor toolbar or press Ctrl+Enter .

To open the query editors right-click your project Console Configuration and select HQL Editor (or Hibernate Criteria Editor).


Tip:

If the context menu items are disabled then you need at first to create a Session Factory. That is done by simply expanding the Session Factory node.

When open the editors they should automatically detect the chosen Console Configuration.

To get a prefill query for any entity (or any entity child node) listed in the Session Factory you should double-click it. This will open the HQL Editor with the associated query.

Choosing HQL Editor in the context menu for any entity (or any entity child node) will also open the HQL editor with the associated query. If you choose Hibernate Criteria Editor in the context menu, it will open Hibernate Criteria Editor with the associated criteria.


It's also possible to copy a portion of code from .java file into the HQL or Criteria editor. To do this make use of the Quick Fix option ( Ctrl + 1).


You can also update the original java code according to changes in the HQL or Criteria editor. For that you should save your HQL/Criteria query and submit the replacing in appeared confirmation dialog.


Also you can pin HQL editor and Criteria editor for one tab in Hibernate Query Result view. For that you need click on Stick result to one tab button( ). In the issue query executions results will be shown in one tab (no more will be opened).

Moreover you are able to rename tab in Hibernate Query Result. Click the tab, and type a new name in Property View->Tab name field.


Using this wizard you can add the next Hibernate annotations to the class: @Column , @Entity , @ManyToOne , @OneToMany , @OneToOne , @ManyToMany , @MappedSuperclass , @Id , @GeneratedValue , @Version

Note:

This section doesn't cover the meaning of the Hibernate annotations , for more information read Hibernate Annotations Documentation .

To open this wizard you should right click the class you want to enrich with annotations >Source>Generate Hibernate/JPA annotations . You will see the Hibernate:add JPA annotations dialog.


In the top of it you can see the list of all classes that will be passed through refactoring. Besides the class you have selected in this list you can also find its superclasses and the classes that objects present in the current class as properties. If you want to add new classes or package to the list of classes, you should click the Back button. In result you will see Add classes and packages page.


Here you can add one more classes or whole package, moreover you can limit dependencies depth by selecting depth control option (more about this option you will find in Creating a Hibernate Mapping File). When finished just press the Next button and you will be returned to The following classes will be changed page and will be able to continue work with it.

By default the tags are added to the fields of selected classes. But you can change this option to Getters in Preferred location of Annotations dropdownlist and then all the annotations will be added to the getter methods. If you choose Auto select from class preference then the annotations are added according to the majority of the already existed ones positions.

If it's nessecary to map your String properties to the columns that length differ from the default value(255) ,change Default string length field and @Column(length = your length) will be created before every String property.

You can add optimistic locking capability to an entity bean by selecting Enable optimistic locking checkbox. This operation will add version property to all the selected classes. The property will be also annotated with @Version ,getter and setter will be created. If the property is already exists,it won't be created ,but the getters,setters will be generated. If there is already @MappedSuperclass with version in the base class of the current class - "version" is not inserted into the current class.

After defining all necessary settings in the current step press Next and follow the next wizard steps.


The view represents two windows: one with the source code and and the second with refactored one. With the help of , , , buttons you can quickly navigate between the differences in the code. If you don't agree with some changes you can't undo them but you can remove the class from the list of classes that need refactoring.


To apply the changes click Finish .

It is possible to configure the eclipse plugin to route all logging made by the plugins and hibernate code it self to the Error Log View in Eclipse.

Error Log View is very useful tool to solve any problem which appears in Hibernate Tools Plugins. You can use if there are troubles with setting up Hibernate Console Configuration.

This is done by editing the hibernate-log4j.properties in org.hibernate.eclipse/ directory/jar . This file includes a default configuration that only logs WARN and above to a set of custom appenders (PluginFileAppender and PluginLogAppender). You can change these settings to be as verbose or silent as you please - see Hibernate Documentation for interesting categories and Log4j documentation.

Starting from 3.0.0 Alpha1 version of JBoss Tools Hibernate plugins support Eclipse Dali integration what now makes it possible to use a Hibernate as a complete JPA development platform.