2011-07-13 100 views
4

問題1:插入連接表許多一對多的關係

我有三個表; User,UserRoleUserRoleRelationships(連接表)。 UserRole表包含我想要與用戶關聯的所有用戶角色。當我插入一個新用戶時,我想添加一個新用戶並在連接表中添加一個新的關聯。現在,當我跑步時插入一個新的用戶查詢:

IWUser iwUser = new IWUser(); 

    iwUser.setUsername("username"); 
    iwUser.setFullName("fullName"); 
    iwUser.setEmail("email"); 
    iwUser.setPassword("password"); 
    iwUser.setPrivatephone("55555"); 
    iwUser.setWorkphone("777"); 


    Set<IWUserRole> roleList = new HashSet<IWUserRole>(); 
    IWUserRole iwUserRole = new IWUserRole(); 
    iwUserRole.setRole("ROLE_USER"); 
    roleList.add(iwUserRole); 

    iwUser.setUserRole(roleList); 
    iwUserManagementService.saveOrUpdate(iwUser); 

休眠運行以下查詢:

Hibernate: insert into dbo.Users (Username, Password, Email, Workphone, Privatephone, FullName) values (?, ?, ?, ?, ?, ?) 
Hibernate: insert into dbo.UserRoles (Role) values (?) 
Hibernate: insert into UserRoleRelationships (UserId, RoleId) values (?, ?) 

我的Hibernate映射是這樣的:

IWUser.hbm.xml

<hibernate-mapping> 
<class name="domain.IWUser" schema="dbo" table="Users"> 
<id name="userId" type="int"> 
    <column name="UserId"/> 
    <generator class="native"/> 
</id> 
<property name="username" type="string"> 
    <column name="Username" not-null="true"/> 
</property> 
<property name="password" type="string"> 
    <column name="Password" not-null="true"/> 
</property> 
<property name="email" type="string"> 
    <column name="Email" not-null="false"/> 
</property> 
<property name="workphone" type="string"> 
    <column name="Workphone" not-null="false"/> 
</property> 
<property name="privatephone" type="string"> 
    <column name="Privatephone" not-null="false"/> 
</property> 
<property name="fullName" type="string"> 
    <column name="FullName" not-null="false"/> 
</property> 
<set cascade="all" inverse="false" name="userRole" table="UserRoleRelationships" lazy="true" > 
    <key> 
    <column name="UserId"/> 
    </key> 
    <many-to-many class="domain.IWUserRole" column="RoleId"/> 
</set> 
</class> 
</hibernate-mapping> 

IWUserRole.hbm.xml

<hibernate-mapping> 
<class name="domain.IWUserRole" schema="dbo" table="UserRoles"> 
<id name="roleId" type="int"> 
    <column name="RoleId"/> 
    <generator class="native"/> 
</id> 
<property name="role" type="string"> 
    <column name="Role" not-null="true"/> 
</property> 
<set cascade="all" inverse="false" name="user" table="UserRoleRelationships" lazy="true"> 
    <key> 
    <column name="RoleId"/> 
    </key> 
    <many-to-many class="domain.IWUser" column="UserId"/> 
</set> 
</class> 
</hibernate-mapping> 

我該如何讓hibernate在連接表中保存具有現有用戶角色的新用戶?

問題2:

當我更新的用戶,休眠刪除連接表的關係。我怎樣才能避免這種情況?

回答

3

我該如何讓hibernate在連接表中保存具有現有用戶角色的新用戶?

檢索用戶角色實體並將其放入列表中,而不是始終創建一個新實例。

我的意思是這部分:

IWUserRole iwUserRole = new IWUserRole(); 
iwUserRole.setRole("ROLE_USER"); 

相反,你會發出一個查詢類似select r from IWUserRole where r.role = 'ROLE_USER'

+0

謝謝!這工作。 – jorgen