gpt4 book ai didi

java - 父子关系-自连接映射

转载 作者:行者123 更新时间:2023-11-30 06:48:51 25 4
gpt4 key购买 nike

我正在尝试构建一个应用程序,它将接收包含员工列表的 XML 文件,并将父子/员工经理关系存储在单个数据库表中。

我的 XML 文件如下所示:

<Employees>
<Employee manager="Patrick">Martin</Employee>
<Employee manager="Patrick">Kent</Employee>
<Employee manager="Martin">Mark</Employee>
<Employee>Hugo</Employee> <!-- root element of the employee-manager tree -->
<Employee manager="Hugo">Osa</Employee>
<Employee manager="Osa">Patrick</Employee>
</Employee>

一名员工只能拥有一名经理,但一名经理可以拥有多名下属/员工。

我在解码收到的 XML 文件时没有遇到任何问题,但现在我正在尝试创建适当的模型,该模型将允许我将解码的值存储在数据库中。数据应存储在名为“Employee”的表中,并应包含以下数据:

------------------------------
| id | Integer |
------------------------------
| employee_name | String |
------------------------------
| parent_id | Integer | -- reference to the manager
------------------------------

我创建了一个名为 Employee 的新类,但我不确定如何定义适当的 ManyToOne/OneToMany 注释。

由于我对此还很陌生,所以我在 Google 上搜索了几个示例和教程(以及 Stack Overflow 上类似问题的答案),但我想我在这个实现中犯了一些大错误在定义这个模型时。我最近的尝试如下:

public class Employee {
@Id
@GeneratedValue
private int id;

@Column(name = "parent_id")
@Transient
@ManyToOne(cascade={CascadeType.ALL})
private String managerName;

@Column(name = "employee_name")
@JoinColumn(name="parent_id")
private String employeeName;

// getters and setters

如果有人能指出我定义适当模型的方向,我将非常非常感激!

最佳答案

Hibernate 中,当您想要映射 ManyToOne 关系时,您会在实体之间映射它,而不仅仅是属性,因此您需要引用 Employee 类型的对象 而不仅仅是 Stringid

问题:

  • 所以你的映射不正确并且会抛出很多映射错误,而不是写:

    @Column(name = "parent_id")
    @Transient
    @ManyToOne(cascade={CascadeType.ALL})
    private String managerName;

    您需要像这样映射ManyToOne关系:

    @ManyToOne(cascade={CascadeType.ALL})
    @JoinColumn(name="manager_id")
    private Employee manager;
  • 并确保您像这样映射关系的另一端:

    @OneToMany(mappedBy="manager")
    private Set<Employee> subordinates = new HashSet<Employee>();
  • 此外,您对 employee_name 列的映射也不正确,@JoinColumn 仅用于关系,不能与简单的专栏,你需要这样写:

    @Column(name = "employee_name")
    private String employeeName;
  • @Transient 在您的映射中没有用处,我们仅在以下情况下使用它:想要使用不会保留在数据库中的属性。

  • 并且最重要确保您使用@Entity映射您的类,这样它就可以持久化在数据库中。

示例:

您可以查看Hibernate Self Join Annotations One To Many mapping example它使用您想要实现的相同模型。

关于java - 父子关系-自连接映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43201598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com