2012-01-10 134 views
1

我有一個很大的問題,試圖將一個實體映射到另一個具有Composite-PK的實體。 .. 我想在這裏實現的是,1用戶可以有許多任務,並且每個任務包含許多模塊,它的動作如何做Hibernate XML映射,一對多使用1 PK映射到具有複合鍵的另一個實體

|用戶| (Userid,Name)
| UserRight | (Userid,TaskId
|任務| (TaskId,ModuleId,ActionId
|操作| (ActionId,ActionName)
|模塊| (的moduleId,模塊名)

在我User.hbm.xml
<set name="tasklist" table="UserRight" cascade="all"> <key column="user_id" /> <many-to-many column="task_id" unique="true"class="kodi.model.UserRights.Task" /> </set>

,我收到此錯誤

SEVERE: Initial SessionFactory creation failed.org.hibernate.MappingException: Foreign key (FK8AF2ACF15756F47C:UserRight [task_id])) must have same number of columns as the referenced primary key (task [task_id,submodule_id,action_id]) 
WARNING: StandardWrapperValve[default]: PWC1406: Servlet.service() for servlet default threw exception 
java.lang.ExceptionInInitializerError 
    at kodi.gen.util.HibernateUtil.buildSessionFactory(HibernateUtil.java:23) 
    at kodi.gen.util.HibernateUtil.<clinit>(HibernateUtil.java:14) 
    at kodi.view.LoginAction.<init>(LoginAction.java:22) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    at java.lang.Class.newInstance0(Class.java:355) 
    at java.lang.Class.newInstance(Class.java:308) 

我知道問題出在becoz,我試圖只使用1屬性映射到一個集3,但我真的不知道如何解決它。

任何人都可以請幫忙嗎?

+0

爲什麼任務有compositeId? TaskId不是唯一的嗎? – Firo 2012-01-10 10:13:32

+0

嗨Firo,是的,你有一個點在那裏..補!!但如果我無法唯一確定在這種情況下的任務,有沒有辦法我可以做這樣的映射? – user1103164 2012-01-10 11:03:56

回答

0

最簡單和最好的方法是使taskid唯一併將其映射爲id。

如果沒有可能的,你可以嘗試<many-to-many property-ref="TaskId"/><many-to-many property-ref="Id"/>