【问题标题】:How to create Hibernate mapping for the following scenario如何为以下场景创建 Hibernate 映射
【发布时间】:2016-10-06 22:38:51
【问题描述】:

如何为以下场景创建 Hibernate 映射。 我有三张桌子,UsersSystemsSystem Assign。 用户分为三种类型——普通用户、超级用户和管理员。

Users 表有五列——user-ID、userName、password、email id 和 userType。 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;
    }
}

【问题讨论】:

  • 我可以在休眠端使用。但是对于这种情况如何在数据库端进行管理。我可以做任何需要的代码更改,只想运行这个应用程序
  • 我尝试为 system_assign 创建一个类,提供 oneToOne 映射,但在将对象另存为 ORA-01722:无效编号时出错。我也会分享我的课程
  • 我已经粘贴了课程
  • 当然,举个例子我会照着写代码。
  • 我认为您需要在SAssign 中使用@ManyToOne 而不是@OneToOne

标签: java oracle hibernate


【解决方案1】:

我使用Role 列表而不是userType@ManyToMany 关联用户和角色。 @ManyToMany 关联的连接表将由 Hibernate 创建。您不需要为此使用持久类。

具有映射的类: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>();

}

【讨论】:

  • 非常感谢 :) 我会在我的应用程序中分析并做同样的事情
  • @shrish 欢迎您。可能,您需要对其进行返工,因为它只是一个模板。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多