0

In my application, I don't have primary key column in one table.I am treating as surrogate key and trying to use tag.but i got exception.

**"org.hibernate.MappingException: Error reading resource:     
    com/mapping/FamilyDetails.hbm.xml"**

**Caused by: org.xml.sax.SAXParseException: 
    The content of element type "class" must match "
    (meta*,subselect?,cache?,synchronize*,comment?,
    (id|composite-id),discriminator?,natural-id?,(version|timestamp)?,
    (property|many-to-one|one-to-one|component|dynamic-
    component|properties|any|map|set|list|bag|idbag|array|
    primitive-array|query-list)*,
    ((join*,subclass*)|joined-subclass*|union-subclass*),loader?,
    sql-insert?,sql-update?,sql-delete?,filter*)".**

Mapping files:-FamilyDetails.hbm.xml

<class name="com.beans.FamillyDetails" 
       table="personal_fmly_dtls" proxy="com.aims.beans.FamillyDetails">


    <natural-id>
        <property name="systemid" />
    </natural-id>
    <property name="membername" 
              type="java.lang.String" column="membername" not-null="true" />
    <property name="relation"  
              type="java.lang.String" column="relation" not-null="true" />
    <property name="dateOfBirth"  
              type="java.util.Date" column="dateofbirth" not-null="true" />

    <many-to-one name="Personal" column="pid" class="com.aims.beans.Personal"/>

</class>



<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<class name="com.aims.beans.Personal" 
       table="personalinfo" proxy="com.aims.beans.Personal">

<id name="pid" column="pid" type="java.lang.Integer">
    <generator class="sequence">
        <param name="sequence">personal_seq</param>
    </generator>
</id>
<property name="name"  
          type="java.lang.String" column="name" not-null="true" />
<property name="deptno"  
          type="java.lang.Integer" column="DEPTNO" not-null="true" />

<component name="permentaddress" class="com.aims.beans.Address">
    <property name="homeAddress1" type="java.lang.String" column="pddress1"/>
    <property name="homeAddress2" type="java.lang.String" column="pddress2"/>
    <property name="homecity"     type="java.lang.String" column="pcity"/>
    <property name="homeState"    type="java.lang.String" column="pstate"/>
</component>
<set name="famildtlslst">
    <key column="pid" not-null="true"/>
    <one-to-many class="com.aims.beans.FamillyDetails"/>
</set>
<join table="address">     
    <key column="pid" /> 
    <component name="Address" class="com.aims.beans.Address">
        <property name="homeAddress1" 
                  type="java.lang.String" column="HomeAddress1"/>
        <property name="homeAddress2" 
                  type="java.lang.String" column="HomeAddress2"/>
        <property name="homecity" 
                  type="java.lang.String" column="homecity"/>
        <property name="homeState" 
                  type="java.lang.String" column="homestate"/>
    </component>
</join>

Please help me.

Matt Gifford
  • 1,268
  • 9
  • 13
user1357722
  • 7,088
  • 13
  • 34
  • 43
  • Is xml-mapping outdated in java hibernate? I mean, with some help from the editor and the refactoring tools it is easy to write. It decoupes the mapping from the entity implementation. I'm also not sure if you can do everything with annotations what you can do with xml. But I'm not familiar with java, I'm using NHibernate and C#. – Stefan Steinegger Jul 06 '12 at 12:49

1 Answers1

2

It may be another component. Components don't need primary keys:

<set name="famildtlslst" table="personal_fmly_dtls">
  <key column="pid" not-null="true"/>
  <composite-element parent="Personal">
    <property name="systemid" />
    <property name="membername" not-null="true" />
    <property name="relation" not-null="true" />
    <property name="dateOfBirth" not-null="true" />
  </composite-element>
</set>

Of course it is another semantic, but if you are happy with a component, it's easier.

Stefan Steinegger
  • 63,782
  • 15
  • 129
  • 193
  • So,Its not required any mapping file.Its fine.But generally if the table doesn't having any primary key .what is alternative way?.But i trying to use natural-id.is it right way use natural-id. – user1357722 Jul 06 '12 at 12:52
  • There is no way to map an entity without primary key. Take a look at this question here: http://stackoverflow.com/questions/767277/hibernate-and-no-pk – Stefan Steinegger Jul 06 '12 at 13:05