簡體   English   中英

如何在DAO中檢索關聯數據?

[英]how to retrieve association data in DAO?

我的問題是關於如何在DAO中檢索關聯數據。

我有3個表:user,role和user_role。 user_role是用戶和角色的關聯表。

create table user (user_id varchar(50) not null primary key, password varchar(50) not null)
create table role (role_id int not null primary key, role_name varchar(50) not null)
create table user_role (user_role_id int not null primary key, user_id varchar(50) not null, role_id int not null)

我有2個課程: UserRole User具有一個roles屬性,它是Role類型的對象列表。

public class User {
   private String userId;
   private String password;
   private List<Role> roles;

   public String getUserId() { return this.userId; }
   public void setUserId(String userId) { this.userId = userId; }
   public String getPassword() { return this.password; }
   public void setPassword(String password) { this.password = password; }
   public List<Role> getRoles() { return this.roles; }
   public void setRoles(List<Role> roles) { this.roles = roles; }
}

public class Role {
   private int roleId;
   private String roleName;

   public int getRoleId() { return this.roleId; }
   public void setRoleId(int roleId) { this.roleId = roleId; }
   public String getRoleName() { return this.roleName; }
   public void setRoleName(String roleName) { this.roleName = roleName; }
}

現在,我正在嘗試構建DAO,並對如何填充User類的role屬性感到困惑。

我想我需要User類的這些DAO方法:

1) User getUserMethod1(String userId) -從用戶表中為特定的user_id檢索一行。 不要填充User類的roles屬性。

2) User getUserMethod2(String userId) -從用戶表中為特定的user_id檢索一行。 還填充User類的roles屬性。

3) void updateUser(String userId) -在用戶表中為特定的user_id更新一行。

4) void deleteUser(String userId) -刪除用戶表中特定user_id的行。

我認為Role類需要這些DAO方法:

1) Role getRole(int roleId) -從角色表中為特定的role_id檢索一行。

2) List<Role> getAllRoles() -從角色表中檢索所有行。

3) void updateRole(int roleId) -為特定的role_id更新角色表中的一行。

4) void deleteRole(int roleId) -為特定的role_id刪除角色表中的一行。


在上述8種DAO方法中, User getUserMethod2(String userId)方法存在問題。

我可以從用戶表中為特定的user_id檢索1行; 然后從user_role表中檢索與該特定user_id相關聯的所有role_id。 但后來我通過他們必須循環,並呼吁Role getRole(int roleId)的方法, Role類各ROLE_ID? 如果是,那我該怎么辦呢? 如果沒有,那么解決方案是什么?

有沒有更好的辦法來解決這個問題,然后調用Role getRole(int roleId)的方法, Role類各ROLE_ID?

感謝您閱讀此問題。

如果您正確設置了hibernate.cfg,則必須具有一對多關聯才能在用戶類中關聯您的設置。

        <set name="role" table="role" inverse="true" lazy="true" fetch="select">
            <key>
                <column name="role_id" />
            </key>
            <one-to-many class="com.model.Role" />
        </set>

無論如何,如果已正確完成此操作,則可以啟用延遲加載以不帶來集合,而僅在嘗試訪問它們時才帶來它們。 請注意,您必須保持會話打開才能進行延遲加載。

對於問題2:您可以在休眠查詢中使用"fetch"來指定集合的​​緊急加載。

您可以使用標准API或HQL來處理各種情況,例如帶走沒有與其關聯的角色的用戶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM