Hi everyone,
I have encountered an issue of mapping my domain objects.
I have three classes:
Code:
public abstract class Item extends Entity {
Item parent;
String code;
public Item getParent() {
return parent;
}
public void setParent(Item parent) {
this.parent = parent;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}
public class Category extends Item {
Set<Item> items;
public Category() {
items = new HashSet<Item>();
}
public Set<Item> getItems() {
return items;
}
public void setItems(Set<Item> items) {
this.items = items;
}
public void addItem(Item item) {
if (item!=null) {
items.add(item);
item.setParent(this);
}
}
public void removeItem(Item item) {
if (item!=null) {
items.remove(item);
item.setParent(null);
}
}
}
public class Product extends Item {
String unit;
double salePrice; // VND
double purchasePrice; // VND
public String getUnit() {
return unit;
}
public void setUnit(String unit) {
this.unit = unit;
}
public double getPurchasePrice() {
return purchasePrice;
}
public void setPurchasePrice(double importPrice) {
this.purchasePrice = importPrice;
}
public double getSalePrice() {
return salePrice;
}
public void setSalePrice(double sellPrice) {
this.salePrice = sellPrice;
}
}
...and I mapped these classes as follow:
Code:
<hibernate-mapping package="com.anant.ejournal.om">
<class name="Item" table="ITEM">
<id
name="id"
column="ITEM_ID"
type="long"
unsaved-value="0">
<generator class="native"/>
</id>
<property
name="name"
column="NAME"
type="string"/>
<property
name="code"
column="CODE"
type="string"/>
<many-to-one
name="parent"
class="Item"
column="PARENT_ID"
cascade="none"/>
</class>
<joined-subclass name="Category" table="CATEGORY" extends="Item">
<key column="CATEGORY_ID"/>
<set
name="items"
cascade="save-update"
table="ITEM"
inverse="true">
<key column="PARENT_ID"/>
<one-to-many class="Item"/>
</set>
</joined-subclass>
<joined-subclass name="Product" table="PRODUCT" extends="Item">
<key column="PRODUCT_ID"/>
<property
name="unit"
column="UNIT"
type="string"/>
<property
name="salePrice"
column="SALE_PRICE"
type="double"/>
<property
name="purchasePrice"
column="PURCHASE_PRICE"
type="double"/>
</joined-subclass>
</hibernate-mapping>
...when I run a sample program as follow:
Code:
....
Category category1 = new Category();
Category category2 = new Category();
Product product1 = new Product();
Product product2 = new Product();
Product product3 = new Product();
category1.addItem(category2);
category1.addItem(product1);
category2.addItem(product2);
category2.addItem(product3);
dao.saveOrUpdate(category1);
....
...Exception was thrown. Here is the stack trace
Code:
Caused by: org.hibernate.MappingException: Unknown entity: com.anant.ejournal.om.Category
at org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:514)
at org.hibernate.impl.SessionImpl.getEntityPersister(SessionImpl.java:1302)
at org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:180)
at org.hibernate.event.def.AbstractSaveEventListener.getEntityState(AbstractSaveEventListener.java:460)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:84)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:502)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:494)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:490)
at org.springframework.orm.hibernate3.HibernateTemplate$16.doInHibernate(HibernateTemplate.java:672)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:361)
at org.springframework.orm.hibernate3.HibernateTemplate.saveOrUpdate(HibernateTemplate.java:669)
at com.anant.baseware.dao.hibernate.HibernateDAO.saveOrUpdate(HibernateDAO.java:76)
at RCMScrapbook.main(RCMScrapbook.java:72)
I dont know if my mapping file is correct. Please help me. Thank you in advance!
I am using
Hibernate version: 3.1.3