Page tree
Skip to end of metadata
Go to start of metadata

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
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 />

<?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" />