Need help with Hibernate? Read this first:
http://www.hibernate.org/ForumMailingli ... AskForHelp
Hibernate version:
3.0.5
Mapping documents:
Code:
<?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="Entity" table="ENTITY">
<cache usage="read-write" />
<id name="id" column="ID" unsaved-value="-1">
<generator class="increment"></generator>
</id>
<set name="stringAttributes" table="ATTRIBUTERELATIONSHIP"
lazy="false" cascade="all-delete-orphan"
where="DISCRIMINATOR = 1" fetch="join">
<key column="ENTITYID" not-null="true"></key>
<one-to-many class="StringAttribute" />
</set>
</class>
</hibernate-mapping>
Code:
<?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="Attribute"
table="ATTRIBUTERELATIONSHIP" discriminator-value="-1"
batch-size="50">
<cache usage="read-write" />
<id name="id" column="ID" unsaved-value="-1">
<generator class="increment"></generator>
</id>
<discriminator column="DISCRIMINATOR" not-null="true"
force="true" />
<many-to-one name="attributeClass"
class="AttributeClass" column="ATTRIBUTECLASSID"
cascade="save-update" lazy="false">
</many-to-one>
<subclass name="StringAttribute" discriminator-value="1"
batch-size="50">
<many-to-one name="stringValue"
class="StringValue" column="VALUEID" not-null="true" unique="true"
cascade="persist,merge,save-update" lazy="false">
</many-to-one>
</subclass>
</class>
</hibernate-mapping>
Code:
<?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="StringValue"
table="STRINGATTRIBUTE" batch-size="50">
<cache usage="read-write" />
<id name="id" column="ID" unsaved-value="-1">
<generator class="increment"></generator>
</id>
<property name="value" column="VALUE"></property>
</class>
</hibernate-mapping>
Code between sessionFactory.openSession() and session.close():
session.saveOrUpdate(entity);
Name and version of the database you are using:
HSQLDB 1.8.0
The generated SQL (show_sql=true):
Hibernate: insert into ENTITY (ID) values (?)
Hibernate: insert into STRINGATTRIBUTE (VALUE, ID) values (?, ?)
I am having trouble figuring out how to map my classes to see if a unique value exists for a given class.
As you can see from my mapping, i have a class Entity that has a Set (one-to-many) of StringAttributes. Each StringAttribute has a mapping (many-to-one) to a single StringValue object. The problem I am having is that StringValue's value column is unique, and I don't know how to tell hibernate to check for the existence of this value before attempting an insert.
Help would be greatly appreciated (credits!)
Jason