2012-01-10 3 views
1

Composite-PKを持つ別のエンティティにエンティティをマップしようとすると大きな問題が生じます。 .. 私がここで達成しようとしているのは、1ユーザーは多くのタスクを持つことができ、各タスクには多くのモジュールとそのア​​クションが含まれています1 PKを使用して1 PKを使用して別のエンティティにマップするためのHibernate XMLマッピングの実行

|ユーザー| (ユーザーID、名前)
| UserRight | (ユーザID,タスクID
|タスク| (タスクID,ModuleId,ActionId
|アクション| (ActionId、ActionName)
|モジュール| (モジュールID、ModuleNameを)

私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>

内と私は私がだけにしようとしている、becoz問題がある知っている

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) 

このエラーを受け取ります1属性を使って3の集合に写像するが、それを解決する方法は本当に分からない。

誰でもお手伝いできますか?

+0

<many-to-many property-ref="Id"/>を試すことができますことができない場合は? TaskIdは一意ではありませんか? – Firo

+0

こんにちはFiroは、はい、そこにポイントがあります..おなら!..しかし、私はこの場合、タスクを一意に識別することができない場合、私はそのようなマッピングのためにできる方法はありますか? – user1103164

答えて

0

最も簡単で最良の方法は、taskidをユニークにしてidとしてマップすることです。

タスクがcompositeIdを持っていないなぜあなたは<many-to-many property-ref="TaskId"/>または

関連する問題