java - 为数据库中的唯一名称创建附加 ID?

标签 java database hibernate

我想创建一个数据库表,该表应包含许多唯一名称,可供其他表引用使用。

示例:

table Country:
Germany
USA
France

我应该将这些名字的字符串标记为 @Id ,或介绍另一个Long id

@Entity
class Country {
    //@Id private Long id;

    @Id private String name; //eg 'Germany'
}

@Entity
class Address {
    @ManyToOne
    private Country country;
}

我认为最好由 Id 引用名称。以便国家/地区表的外键中的名称不会重复?或者这并不重要?

如果新地址没有 String country 有什么好处吗?字段,但只是对国家/地区的引用(因为相同的国家/地区名称将在多个地址中重复使用,因此地址表中不会有重复的名称条目)。

但我可以想象,一个缺点可能是我在保留地址之前没有国家/地区 ID。因此,我首先必须检查 SELECT * FROM Country WHERE name := name ,检查是否 ==null并创建一个新的国家/地区条目,然后创建 Address .

您认为这里使用 String 或 Long 作为 Id 更好吗?

最佳答案

我会使用长 ID。

我会避免使用该字符串,因为国家/地区名称不是恒定的:众所周知,它们会发生变化,并且必须更改所有外键值会很糟糕。

我会避免使用枚举路线,因为它需要您更改/重建/重新编译以处理新的国家/地区或国家/地区名称更改。

关于java - 为数据库中的唯一名称创建附加 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21019309/

相关文章:

java - 使用 DecimalFormat 的科学记数法中的有效位数

java - hibernate SQLquery 提取变量

java - 是否不鼓励在同一领域使用 @Spy 和 @InjectMocks?

hibernate - 如何在Grails中的hasMany关系中指定查询?

hibernate - BigDecimal 0.000 到 0

hibernate - 我可以让 Hibernate 根据唯一列约束替换对象吗?

java - Android 中如何检查数字字段是否为空

SQL 语法

php - 解析数据提要

ruby-on-rails - PG::ConnectionBad: FATAL: EC2 amazon 上不存在数据库 "db_name"