OK, I'm trying to make this work with an association class but still getting an error. I question my mappings due to the FK errors I am getting. Thanks in advance for all your help. It really is appreciated....I know I'm close.
Category.hbm.xml.....
Code:
<hibernate-mapping>
<class name="com.Category" table="CATEGORY" dynamic-update="true" dynamic-insert="true">
<id name="id" column="CATEGORY_ID">
<generator class="sequence">
<param name="sequence">SEQ_ADVISORY</param>
</generator>
</id>
<version name="version" type="long" column="VERSION" unsaved-value="null"/>
<property name="name" column="CATEGORY_NAME"/>
<set name="categoryItems" inverse="false" cascade="all-delete-orphan" lazy="false">
<key>
<column name="ITEM_ID"/>
</key>
<one-to-many class="com.CategoryItem"/>
</set>
</class>
</hibernate-mapping>
-----------
CategoryItem.hmb.xml
Code:
<hibernate-mapping>
<class name="com.CategoryItem" table="CATEGORY_ITEM" dynamic-update="true" dynamic-insert="true">
<id name="id" column="CATEGORY_ITEM_ID">
<generator class="sequence">
<param name="sequence">SEQ_ADVISORY</param>
</generator>
</id>
<many-to-one name="category" column="CATEGORY_ID" cascade="all-delete-orphan"
class="com.Category" outer-join="false"></many-to-one>
<many-to-one name="item" column="ITEM_ID" cascade="all-delete-orphan"
class="com.Item" outer-join="false"></many-to-one>
</class>
</hibernate-mapping>
--------------------
Item.hbm.xml
Code:
<hibernate-mapping>
<class name="com.Item" table="ITEM" >
<id name="id" column="ITEM_ID">
<generator class="sequence">
<param name="sequence">SEQ_ADVISORY</param>
</generator>
</id>
<version name="version" type="long" column="VERSION" unsaved-value="null"/>
<property name="name" column="ITEM_NAME"/>
<property name="description" column="ITEM_DESC"/>
<set name="categoryItems" inverse="true" cascade="all-delete-orphan" lazy="false">
<key>
<column name="CATEGORY_ID"/>
</key>
<one-to-many class="com.CategoryItem"/>
</set>
</class>
</hibernate-mapping>
************************
Catgory.java
Code:
public class Category
{
private String id, name;
private Set categoryItems = new HashSet();
private Long version;
public void addItem(Item item)
{
CategoryItem catItem = new CategoryItem(this, item);
this.categoryItems.add(catItem);
item.getCategoryItems().add(catItem);
}
------CategoryItem.java
Code:
public class CategoryItem
{
private String id;
private Category category;
private Item item;
public CategoryItem()
{
}
public CategoryItem(Category category, Item item)
{
this.category = category;
this.item = item;
}
}
--------------
Item.java
Code:
public class Item
{
private String id;
private String name;
private String description;
private Set categoryItems = new HashSet();
private Long version;
}
ERROR:Hibernate: select SEQ_ADVISORY.nextval from dual
Hibernate: select SEQ_ADVISORY.nextval from dual
Hibernate: select SEQ_ADVISORY.nextval from dual
Hibernate: insert into CATEGORY (VERSION, CATEGORY_NAME, CATEGORY_ID) values (?, ?, ?)
Hibernate: insert into ITEM (VERSION, ITEM_NAME, ITEM_DESC, ITEM_ID) values (?, ?, ?, ?)
Hibernate: insert into CATEGORY_ITEM (CATEGORY_ID, ITEM_ID, CATEGORY_ITEM_ID) values (?, ?, ?)
Hibernate: update CATEGORY_ITEM set ITEM_ID=? where CATEGORY_ITEM_ID=?
org.springframework.orm.hibernate3.HibernateJdbcException: JDBC exception on Hibernate data access: Could not execute JDBC batch update; nested exception is java.sql.BatchUpdateException: ORA-02291: integrity constraint (DB.CATEGORY_ITEM_FK) violated - parent key not found
java.sql.BatchUpdateException: ORA-02291: integrity constraint (CESSOAI1.CATEGORY_ITEM_FK) violated - parent key not found
at oracle.jdbc.dbaccess.DBError.throwBatchUpdateException(DBError.java:460)
at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:4133)
at org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:294)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:57)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:174)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:226)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:140)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:274)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:730)
at org.springframework.orm.hibernate3.SessionFactoryUtils$SpringSessionSynchronization.beforeCommit(SessionFactoryUtils.java:869)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCommit(AbstractPlatformTransactionManager.java:564)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:424)
at org.springframework.transaction.interceptor.TransactionAspectSupport.doCommitTransactionAfterReturning(TransactionAspectSupport.java:258)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:67)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:174)
at $Proxy3.addCategory(Unknown Source)
at com.ecarey.ces.service.advisory.AdvisoryServiceTestCase.testCategoryItemManyToManyJoin(AdvisoryServiceTestCase.java:52)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at com.intellij.rt.execution.junit2.JUnitStarter.main(JUnitStarter.java:32)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
[/code]