2013-09-28 91 views
1

我打算設計一個帶有休眠功能的新系統。 如果我創建一個Hibernate類與映射例如休眠映射和未映射類和mysql設計

@Entity 
@Table(name="user") 
public class User{ 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private Integer userid; 

    private String username; 
    private String password; 

    @OneToOne 
    private Role userrole; 

..... 
} 

添加角色類

@Entity 
public class Role { 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private int id; 

    private String roleName; 
... 
} 

在這種情況下,每當我將用戶添加到數據庫中我得從數據庫角色對象時並添加到用戶對象並保存。如果我將這樣的映射定義到其他複雜的設計類,我必須從db中獲取相關的映射類。我覺得這是額外的負載分貝。是他們有效的途徑嗎?

我還有一個計劃,從Hibernate映射

@Entity 
@Table(name="user") 
public class User{ 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private Integer userid; 

    private String username; 
    private String password; 
    private Integer roleid; 
.... 
} 

做到像在這種情況下,我可以將ID只添加到用戶對象和保存。但是db類不會被映射。如果我這樣做到所有的類,我將有db表,而無需映射db 如果我這樣做得到角色名稱,我必須創建另一個SQL來獲得角色。

所以在保存對象的第一種方法中,我已經獲取對象並保存,在第二種方法中,我們必須創建兩個sql來獲取這兩個對象。 這是實施它的好方法嗎?

從這兩個設置好,高效和易於使用? 任何討論建議的方式請嗎?

回答

1

在這種情況下,每次當我將用戶添加到我得 數據庫從數據庫獲取的作用對象,並添加到用戶對象,並將其保存時間。如果 我定義了這樣的映射到其他複雜的設計類,我 必須從數據庫中獲取相關的映射類。我覺得這是一個 額外的負載分貝。是他們有效的途徑嗎?

在這裏,您沒有從數據庫加載角色對象。您應該創建一個Role實例並將其添加到User中。

Role r=new Role(); 
    r.setName("ROLE_NAME"); 

    user.setRole(r); 
    r.setUser(user); 
    session.saveOrUpdate(user); 
    session.saveOrUpdate(r); 

如果級聯與用戶的角色,比你可以減少重複saveOrUpdate()操作。

從這兩個設置好,高效和易於使用?任何 討論建議的方式請?

一般來說,對於JDBC身份驗證角色和用戶表應該是分開映射的。所以,第一種方法被推薦。

+0

只需創建一個帶id的角色對象並將其設置爲用戶對象正在工作。謝謝。並且用戶擁有地址集合,並使其懶惰初始化以避免在獲取用戶對象時加載所有地址。但是,如果我想讓所有的用戶都知道地址,那麼如何獲取它。這可能是一個簡單的問題,因爲我是休眠的新手? –

+1

如果您定義了延遲初始化,則地址將不會與用戶一起加載。在調用user.getAddress()時,地址查詢將在數據庫中觸發,並使用用戶表加載地址。 – Masudul

+0

謝謝,因爲這個用戶對象應該在持久狀態中。 –