Code:
<class
    name="bb.hibernate.UserData"
    table="userdata"
>
      <composite-id name="compId" class="bb.hibernate.UserLanguageKey">
        <key-property name="userId"  column="UserId" type="int" />
        <key-property name="languageCode" column="LanguageCode" type="string" />
      </composite-id>
...
The above results in:
Code:
org.xml.sax.SAXParseException: Attribute "class" must be declared for element type "key-property".
   at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
   at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)
   at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
   at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
   at org.apache.xerces.impl.dtd.XMLDTDValidator.addDTDDefaultAttrsAndValidate(Unknown Source)
   at org.apache.xerces.impl.dtd.XMLDTDValidator.handleStartElement(Unknown Source)
   at org.apache.xerces.impl.dtd.XMLDTDValidator.emptyElement(Unknown Source)
   at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
   at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
   at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
   at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
   at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source)
   at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
   at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
   at org.jdom.input.SAXBuilder.build(SAXBuilder.java:305)
   at org.jdom.input.SAXBuilder.build(SAXBuilder.java:376)
   at org.jdom.input.SAXBuilder.build(SAXBuilder.java:357)
   at net.sf.hibernate.tool.hbm2java.CodeGenerator.main(CodeGenerator.java:98)