【问题标题】:Mapping EXCEL Sheet to Database using JPA Hibernate使用 JPA Hibernate 将 EXCEL 表映射到数据库
【发布时间】:2018-04-12 13:30:29
【问题描述】:

我想使用 hibernate 将一个简单的 Excel 表映射到我的 javaEE 应用程序。我对数据库和 ORM 真的很陌生,所以我想知道以下关系是否有意义以及拆分表需要多少实体。

这是 Excel 电子表格中包含的属性:

(Office Room Number|ComputerName|ComputerIP|Computer OS|UserFirstName|UserLastName)

关系:

  • OfficeRoomNumber -- 1 : N -- Users
    • N 个用户在 1 个办公室工作?
  • OfficeRoomNumber -- 1 : N -- Computer
    • N 台计算机在 1 个办公室?
  • User -- 1:1 -- Computer
    • 1 位用户有 1 台计算机?

感谢您的帮助,并为我糟糕的英语感到抱歉。

【问题讨论】:

  • 您能提供一些示例输入和输出吗?
  • 我想用这个表创建一个简单的 CRUD 应用程序,正常的行看起来像这样 (12 | Computer-1012 | 10.0.10.51 | Win 10 | Peter | Miller) 感谢您的帮助跨度>
  • 您的问题并不能说明您真正想要什么。您需要将 OO 类建模为实体。另一件事是如何将excel表格的数据转换为这些建模对象。告诉您是否对模型实体有疑问。关于excel,使用Apache POI库读取表格并转换为对象。
  • 是的,我不确定如何为实体建模和使用注释。我的想法是拥有 3 个实体(OfficeRoom、计算机和用户)并使用注释,就像我用“@ManyToOne”和“@OneToOne”描述的关系一样
  • @Tabax 首先忘记了 JPA 并在 OO 中为您的实体建模。在那之后。阅读本主题docs.jboss.org/hibernate/annotations/3.5/reference/en/html/…

标签: mysql database hibernate jpa


【解决方案1】:

这是我为您的域建模的 50c。首先,可以将抽象基类用于通用方面,例如主键生成:

@MappedSuperClass
public abstract class AbstractEntity {

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "pk-sequence")
    @SequenceGenerator(name = "pk-sequence", sequenceName = "ID_GEN", allocationSize = 1)
    protected Long objectID = -1;

    @Version
    private int version;

    public int getVersion() {
        return version;
    }

    public long getObjectID() {
        return objectID;
    }   
}

请注意,这可以增强以包含其他通用方面,例如创建/修改日期/时间戳。

接下来,我们介绍三个领域类/实体如下:

@Entity
public class OfficeRoom extends AbstractEntity {

    private String name;
    private String roomNumer;

    @ManyToMany // Maybe an employee is associated with 2 or more office places she/he might work at?
    private Collection<Employee> staff;

    @OneToMany(mappedBy="location")
    private Collection<Computer> equipment;

    // getters and setters
}

我添加了一条评论,您可以在上面看到现场工作人员。可能有人希望将两个不同的办公室与某些 VIP 员工相关联,因此您应该在此处使用@ManyToMany 对您的域进行建模时考虑这种情况。

继续:

@Entity
public class Computer extends AbstractEntity {
    private String name;
    private String model;
    private String vendor;
    private String installedOS;
    private String ipAddress;

    @ManyToOne
    private OfficeRoom location;

    @OneToMany(mappedBy="machine") // Maybe a computer is associated with 2 or more employees?
    private Collection<Employee> user;

    // getters and setters
}

再次,请仔细考虑我的评论。最后,...

@Entity
public class Employee extends AbstractEntity {
    private String firstName;
    private String lastName;
    // other staff related attributes here ...

    @ManyToOne
    private Computer machine;

    // getters and setters
}

请注意:在您的导入语句中仅使用源自 javax.persistence 包的注释,以保持符合 JPA 2.x 规范并保持 JPA 提供者与您的应用程序中立。

希望这会有所帮助。

【讨论】:

  • 非常感谢!你真的在这里帮助了我!我知道现在该做什么了:)
  • @Tabax 如果答案对您有所帮助并且您从长远来看从中学到了东西,请考虑给予支持。
猜你喜欢
  • 2012-04-06
  • 2022-07-22
  • 1970-01-01
  • 2012-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-02
相关资源
最近更新 更多