Wiki Spaces


Get Help from Others

Q&A: Ask OpenMRS
Discussion: OpenMRS Talk
Real-Time: IRC Chat | Slack


Page tree

Versions Compared


  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

OpenMRS currently uses Hibernate to connect the OpenMRS objects to the relational database tables.

You can see the hibernate mapping files in [source:openmrs/trunk/metadata/api/hibernate].

Modules must add hibernate.hbm.xml files to their /metadata file AND reference them in their config.xml files in the <mappingFiles> element.


Example Java Object
Code Block
package org.openmrs;

import java.util.Collection;
import java.util.Date;
import java.util.HashSet;
import java.util.Locale;

 * ConceptName is the real world term used to express a Concept within the idiom of a particular
 * locale.
public class ConceptName extends BaseOpenmrsObject implements Auditable {

	// Fields
	private Integer conceptNameId;

	private Concept concept;

	private String name;

	private Locale locale;

	private Collection<ConceptNameTag> tags;

	// Constructors

	/** default constructor */
	public ConceptName() {

	 * Convenience constructor to create a ConceptName object by primary key
	 * @param conceptNameId
	public ConceptName(Integer conceptNameId) {
		this.conceptNameId = conceptNameId;

	 * @see java.lang.Object#equals(java.lang.Object)
	public boolean equals(Object obj) {
		if (!(obj instanceof ConceptName)) {
			return false;
		ConceptName rhs = (ConceptName) obj;
		if (this.conceptNameId != null && rhs.conceptNameId != null)
			return (this.conceptNameId.equals(rhs.conceptNameId));
			return this == obj;

	 * @see java.lang.Object#hashCode()
	public int hashCode() {
		if (this.getConceptNameId() == null)
			return super.hashCode();
		int hash = 3;
		hash = hash + 31 * this.getConceptNameId();
		return hash;

	public Integer getConceptNameId() {
		return conceptNameId;

	public void setConceptNameId(Integer conceptNameId) {
		this.conceptNameId = conceptNameId;

	public Concept getConcept() {
		return concept;

	public void setConcept(Concept concept) {
		this.concept = concept;

	public String getName() {
		return name;

	public void setName(String name) { = name;

	public Locale getLocale() {
		return locale;

	public void setLocale(Locale locale) {
		this.locale = locale;

	public Collection<ConceptNameTag> getTags() {
		return tags;

	public void setTags(Collection<ConceptNameTag> tags) {
		this.tags = tags;


Hibernate Mapping File

This mapping file works with the above concept.

Some attributes defined here (like uuid, creator, voided, etc) are defined on the parent class of ConceptName.

<generator />can also be the custom openmrs<generator />

Code Block
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.1//EN"
        "" >

<hibernate-mapping package="org.openmrs">

	<class name="ConceptName" table="concept_name">

		<id name="conceptNameId" type="int" column="concept_name_id">
			<generator />


		<property name="name" type="java.lang.String" length="65535" not-null="true" />
		<property name="locale" type="java.util.Locale" length="50" not-null="true"/>

		<property name="dateCreated" type="java.util.Date" column="date_created" not-null="true"/>
		<many-to-one name="creator" column="creator" not-null="true"/>

		<property name="voided" type="java.lang.Boolean" column="voided"
			length="1" not-null="true" />
		<property name="dateVoided" type="java.util.Date"
			column="date_voided" length="19" />
		<property name="voidReason" type="java.lang.String"
			column="void_reason" length="255" />
		<many-to-one name="voidedBy" column="voided_by" />

		<set name="tags" table="concept_name_tag_map" cascade="save-update">
			<key column="concept_name_id"/>
			<many-to-many column="concept_name_tag_id"/>

		<property name="uuid" type="java.lang.String" column="uuid" length="38" unique="true" />