如何为以下方案创建Hibernate映射

时间:2016-06-07 06:51:18

标签: java oracle hibernate

如何为以下场景创建Hibernate映射。 我有三个表,UsersSystemsSystem Assign。 用户有三种类型 - 普通用户,超级用户和管理员。

Users表有五列 - 用户ID,用户名,密码,电子邮件ID和userType。 userType将决定用户是超级用户还是管理员或普通用户。

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

我已经创建了一个表System Assign来为具有两列user-ID和system_id的用户分配系统(或者如果需要可以更正它)。还创建了这两个作为各个表的外键。

映射的条件是:

  1. 用户可以在其姓名上拥有一个或多个系统ID。
  2. 系统ID可以分配给一个或多个用户。
  3. 当从UI中删除system_assign记录时,它应该只断开用户和系统之间的链接,但用户和系统应该在数据库中。
  4. 此外,我还需要进行一些数据库更改:

    • 如果超级用户创建了一个用户,则该用户将在他之下
    • 如果超级用户创建系统,系统将在他之下。
    • 如果用户被删除,那么系统现在应该属于超级用户。

    我需要知道如何为这个senario创建hibernate类

    @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;
        }
    }
    

1 个答案:

答案 0 :(得分:1)

我使用Role而不是userType的列表以及用户和角色的@ManyToMany关联。 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>();

}