繁体   English   中英

多对一关系在同一张桌子上

[英]Many to One Relation on same table

您认为一家公司,该公司在Users表上有员工,经理必须在Users表上。

例:

Users Table : John Watson userID=1 managerId=2(manager id have userID value)
              Emilia Clarke userID=2 managerID=null(Because this user is a Manager)

您如何看待我呢? managerID行与Users表的多对一关系(尽管具有相同的表)

约翰·沃森(John Watson)的艾米莉亚·克拉克(Emilia Clark)经理(因为约翰的managerID,艾米莉亚的用户ID

只需保留userId并添加一个布尔值isManager即可,如果用户是管理员,则其值为true,否则为false。

要获取员工列表及其经理的详细信息,请尝试以下操作:

SELECT employee.userID,
       employee.userName,
       manager.userID,
       manager.userName
FROM Users AS employee
JOIN Users AS manager ON employee.managerID = manager.userID
ORDER BY employee.userName,
         employee.userID;

要获取经理及其员工的列表,请尝试以下操作...

SELECT manager.userID,
       manager.userName
       employee.userID,
       employee.userName,
FROM Users AS manager
JOIN Users AS employee ON manager.userID = employee.managerID
ORDER BY manager.userName,
         manager.userID,
         employee.userName,
         employee.userID;

(说明如下...)

如果您有任何问题或意见,请随时发表评论。

您可以如下映射:

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

    @Id
    @Column(name = "user_id")
    @GeneratedValue(strategy = ...)
    private Long id;

    @OneToMany(mappedBy = "manager")
    private Set<User> employees;

    @ManyToOne
    @JoinColumn(name = "manager_id"
    private User manager;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM