Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建只有ID属性的实体表有意义吗?_Java_Database_Hibernate - Fatal编程技术网

Java 创建只有ID属性的实体表有意义吗?

Java 创建只有ID属性的实体表有意义吗?,java,database,hibernate,Java,Database,Hibernate,当单个实体只应包含@Id值作为字符串时,创建单个实体有意义吗 @Entity class CountryCode { @Id String letterCode; //GBR, FRA, etc } @Entity class Payment { CountryCode code; // or directly without further table: String countryCode; } 或者您是否只使用letterCode作为stringvalue,而不

当单个实体只应包含
@Id
值作为字符串时,创建单个实体有意义吗

@Entity
class CountryCode {
   @Id
   String letterCode; //GBR, FRA, etc
}

@Entity
class Payment {
   CountryCode code;
   // or directly without further table: String countryCode;
}
或者您是否只使用letterCode作为stringvalue,而不是创建
CountryCode
实体


例如,以后应该可以获取包含特定国家代码的所有付款。这两种解决方案都可能实现。但是哪一个更好(为什么)?

是的,如果将实体用作查找,则可以。在您的示例中,您可能需要为字母代码添加一列“说明”(法国、英国等)和第三列(无论其是否处于活动状态),还可能需要为插入时间和上次更改时间添加列。

如果将实体用作查找,则可以添加。在您的示例中,您可能希望为字母代码添加一列描述congaing(法国、英国等),以及第三列,无论其是否处于活动状态,也可能为插入时间和上次更改时间添加列。

创建此类表以提供数据一致性是有意义的,也就是说,不使用不存在的
CountryCode
创建任何
付款。在
Payment
上使用单独的实体(即表)和外键可以检查数据库中的一致性


另一种可能的方法是在代码字段上设置check约束,但如果添加/删除代码和/或存在多个此类列,则很容易出错

创建这样的表以提供数据的一致性是有意义的,即不使用不存在的
CountryCode
创建任何
Payment
。在
Payment
上使用单独的实体(即表)和外键可以检查数据库中的一致性


另一种可能的方法是在代码字段上设置check约束,但如果添加/删除代码和/或存在多个此类列,则很容易出错

添加
lettcode
作为字符串属性的
Payment
类(或防止键入错误的枚举)将提高获取性能,因为您不需要在
CountryCode
表上创建联接

添加
lettcode
作为字符串属性的
Payment
类(或防止键入错误的枚举)将提高获取性能,因为您不需要在
CountryCode
表上创建联接