Reputation: 23
I am little lost with Hibernate collections mapping. Trying to add a persistence configuration in Eclipse Hibernate perspective throws following:
Invalid ORM mapping file.
Error parsing XML (line14 : column 16): The content of element type "list" must match "(meta*,subselect?,cache?,synchronize*,comment?,key,(index|list-index),(element|one-to-many|many-to-many|composite-element|many-to-any),loader?,sql-insert?,sql-update?,sql-delete?,sql-delete-all?,filter*)".
Error parsing XML (line17 : column 15): The content of element type "map" must match "(meta*,subselect?,cache?,synchronize*,comment?,key,(map-key|composite-map-key|map-key-many-to-many|index|composite-index|index-many-to-many|index-many-to-any),(element|one-to-many|many-to-many|composite-element|many-to-any),loader?,sql-insert?,sql-update?,sql-delete?,sql-delete-all?,filter*)".
Actual mapping configuration is as follows:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="core.Server" table="server" schema="imdb">
<id name="serverId" type="java.lang.Integer">
<column name="SERVER_ID" />
<generator class="identity" />
</id>
<list name="sessions" inverse="true">
<key column="serverID" not-null="true"/>
<list-index column="SERVER_SESSION_NUMBER" />
<one-to-many class="core.Session"/>
</list>
<map name="users" inverse="true">
<key column="serverID" not-null="true"/>
<map-key type="string" column="SERVER_USER_NUMBER"/>
<one-to-many class="core.User"/>
</map>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="core.User" table="user" schema="imdb">
<id name="userId" type="java.lang.Integer">
<column name="USER_ID" />
<generator class="identity" />
</id>
<property name="login" column="LOGIN" type="string" />
<property name="online" column="ONLINE" type="boolean" />
<property name="last_message" column="LAST_MESSAGE" type="string" />
<property name="newmessage" column="NEW_MESSAGE" type="boolean" />
<many-to-one name="serverID" column="SERVER_ID" class="core.Server"/>
<list name="sessions" inverse="true">
<key column="USER_ID" not-null="true"/>
<one-to-many class="core.Session"/>
<list-index column="USER_SESSION_NUMBER" />
</list>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="core.Session" table="session" schema="imdb">
<id name="sessionID" type="java.lang.Integer">
<column name="SESSION_ID" />
<generator class="identity" />
</id>
<many-to-one name="serverID" column="SERVER_ID" class="core.Server"/>
<many-to-one name="userID" column="USER_ID" class="core.User/>
</class>
</hibernate-mapping>
Thanks for helping!
Upvotes: 0
Views: 2809
Reputation: 5130
The order is specific (and given to you in the error message). This isn't a hibernate thing, it is a XML schema thing.
So get the order of the tags correct, eg: <list-index> needs to be before <one-to-many > etc
edit: Not all tables are wrong. The first one is ok. The second one has two errors and should be
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="core.User" table="user" schema="imdb">
<id name="userId" type="java.lang.Integer">
<column name="USER_ID" />
<generator class="identity" />
</id>
<property name="login" column="LOGIN" type="string" />
<property name="online" column="ONLINE" type="boolean" />
<property name="last_message" column="LAST_MESSAGE" type="string" />
<property name="newmessage" column="NEW_MESSAGE" type="boolean" />
<list name="sessions" inverse="true">
<key column="USER_ID" not-null="true"/>
<list-index column="USER_SESSION_NUMBER" />
<one-to-many class="core.Session"/>
</list>
<many-to-one name="serverID" column="SERVER_ID" class="core.Server"/>
</class>
</hibernate-mapping>
your third one is wrong as it has a missing quote after class="core.User - and should be
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="core.Session" table="session" schema="imdb">
<id name="sessionID" type="java.lang.Integer">
<column name="SESSION_ID" />
<generator class="identity" />
</id>
<many-to-one name="serverID" column="SERVER_ID" class="core.Server"/>
<many-to-one name="userID" column="USER_ID" class="core.User"/>
</class>
</hibernate-mapping>
Upvotes: 2