2016-06-07 30 views
-2

如何爲以下場景創建Hibernate映射。 我有三個表格,UsersSystemsSystem Assign。 有三種類型的用戶 - 普通用戶,超級用戶和管理員。如何爲以下場景創建Hibernate映射

Users表有五列 - 用戶ID,用戶名,密碼,電子郵件ID和用戶類型。 userType將決定用戶是超級用戶還是管理員還是普通用戶。

Systems表有一些列,但最重要的是systemsID它將用於映射。

我創建了一個表System Assign,爲具有兩列user-ID和system_id的用戶分配一個系統(或者如果需要可以更正)。還創建了這兩個作爲相應表的外鍵。

映射的條件是:

  1. 用戶可以對自己的名字的一個或多個系統ID。
  2. 系統ID可以分配給一個或多個用戶。
  3. 當從UI中刪除system_assign記錄時,它應該只打破用戶和系統之間的鏈接,但用戶和系統應該在數據庫中。

而且我必須做出一些像這樣的數據庫更改:

  • 如果超級用戶創建一個用戶,該用戶將可以在他
  • 如果一個超級用戶創建了一個系統,系統會在他之下。
  • 如果用戶被刪除,那麼系統現在應該超級用戶。

我需要知道如何爲這個塞納里奧

@Entity 
@Table(name = "SYSTEM_ASSIGN") 
public class SAssign implements Serializable { 
    /** 
    * 
    */ 
    private static final long serialVersionUID = -1945028654484806943L; 
    @Id 
    @OneToOne(cascade = CascadeType.ALL) 
    @JoinColumn(name = "USERSSO") 
    private Users user; 
    @OneToOne(cascade = CascadeType.ALL) 
    @JoinColumn(name = "SYSTEMID") 
    private Systems system; 
    public Users getUser() { 
     return user; 
    } 
    public void setUser(Users user) { 
     this.user = user; 
    } 
    public Systems getSystem() { 
     return system; 
    } 
    public void setSystem(Systems system) { 
     this.system = system; 
    } 
} 
+0

我可以在休眠側使用。但是在這種情況下如何在數據庫端進行管理。我可以做任何需要更改的代碼,只是想運行這個應用程序 – shrish

+0

我已經嘗試創建一個system_assign的類給予oneToOne映射,但在保存對象爲ORA-01722時出錯:無效的數字。我也會分享我的課程 – shrish

+0

我已經粘貼了課程 – shrish

回答

1

我用的Role代替userType列表以及@ManyToMany協會用戶和角色創建Hibernate類。 Hibernate會創建@ManyToMany關聯的連接表。你不需要爲它使用持久化類。

類與映射:usersystem

用於映射的測試:UserSystemTest.java

public enum RoleEnum { 

    ADMIN, USER, SUPER_USER 

} 

@Entity 
@Table(name = "roles") 
public class Role { 

    @Id 
    @GeneratedValue 
    @Column(name = "f_pid") 
    private Long pid; 

    @Column(name = "f_role") 
    @Enumerated(EnumType.STRING) 
    private RoleEnum role; 

} 

@Entity 
@Table(name = "systems") 
public class SomeSystem { 

    @Id 
    @GeneratedValue 
    @Column(name = "f_pid") 
    private Long pid; 

    @Column(name = "f_name") 
    private String name; 

} 

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

    @Id 
    @GeneratedValue 
    @Column(name = "f_pid") 
    private Long pid; 

    @Column(name = "f_user_name") 
    private String userName; 

    @ManyToMany(fetch = FetchType.LAZY) 
    @JoinTable(name = "user_roles", joinColumns = { @JoinColumn(name = "fk_user") }, 
      inverseJoinColumns = { @JoinColumn(name = "fk_role") }) 
    private List<Role> roles = new ArrayList<Role>(); 

    @ManyToMany(fetch = FetchType.LAZY) 
    @JoinTable(name = "system_assign", joinColumns = { @JoinColumn(name = "fk_user") }, 
      inverseJoinColumns = { @JoinColumn(name = "fk_system") }) 
    private List<SomeSystem> systems = new ArrayList<SomeSystem>(); 

} 
+0

非常感謝:)我將在我的應用程序中進行分析並做同樣的工作 – shrish

+0

@shrish歡迎您。可能你需要重做它,因爲它只是一個模板。 –