【问题标题】:Should a model contain an id?模型应该包含 id 吗?
【发布时间】:2019-05-31 17:04:24
【问题描述】:

我正在编写一个包含模型的数据库驱动的 Java 应用程序。我不知道在哪里放置身份证。这应该在模型中还是在其他对象中。

public class model {
    int id;
    int data;
}

另外,如何创建初始 id 值?

【问题讨论】:

  • 看起来不错。在将其保存到数据库之前,未设置 ID。
  • 如果您有多个实体,所有实体都通过 long 值映射,您可以创建一个包含 id 的抽象超类。
  • @jax:是的,DB 表列应该设置为 AUTO-INCREMENT。数据库在插入记录时设置 ID。您从数据库中获取该 ID 值并将其设置在对象中
  • @jax 最佳实践是通常使用 JPA。查看使用 JPA 的 Spring Boot 教程(即使您不使用 Spring,它们也会在最佳实践方面保持最新)。
  • Hibernate 是 JPA 的一个实现,与之交互时最好使用 JPA 接口。 (使用 Hibernate 作为您选择的 JPA 提供程序是一个可靠的选择。)如果您打算使用 MySQL 或 Postgres 等完整数据库,那么还值得考虑使用 Spring Boot 来管理您的 JavaFX 应用程序;它使事务和存储库(以及配置 Hibernate)等任务的管理变得更加简单。

标签: java database model-view-controller model


【解决方案1】:

我正在编写一个包含模型的数据库驱动的 Java 应用程序。

如果模型类保存数据库信息,则这些类是存储它们所代表的表/视图/集合的 id 的最佳位置。
通常,对于非复合键,您将 id 直接表示为 int/long,而您通常希望用特定类表示复合键,例如:

public class Model {
    ModelPk modelPk;
    int data;
    //getters
}

public class ModelPK {
    long idFoo;
    long idBar;
    //getters
}

另外,如何创建初始 id 值?

对于关系型数据库,通常采用自增序列。
使用 NoSQL DB,原子序列是可能的,但这不是标准方式(不一定可扩展并适应爆炸的数据模型)。其他方式允许生成具有某些约束的唯一对象标识符,这些约束可能根据情况是可接受的(例如,不一定是一系列数字,而是时间戳和其他事物的混合)。

在任何情况下,您都不想自己生成标识符,因为确保它在来自多个应用程序的潜在多个客户端之间保持一致和唯一至关重要。

【讨论】:

    猜你喜欢
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 2011-11-07
    • 2019-03-17
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    相关资源
    最近更新 更多