我所在的公司正在进行一项重要讨论,即在Hibernate中将原始类型直接映射到实体和表格(POJOs)中,还是使用包装类(java.lang.Integer、java.lang.Long)。
我们的目标是确保这些值在数据库中不为空。
倾向于使用原始类型的理由:
- 将这些值处理为int类型可以确保它们永远不会为null,从而防止在字段上意外获取空引用。
- int类型只需要32/64位内存,而Integer则需要16字节内存并且速度较慢。
倾向于使用包装对象的理由:
- 我们可以在数据库级别添加约束来始终防止出现null值。
- 如果用户没有设置值,我们可能会得到0而不是null,在数据库中会导致误导性数据,难以捕捉错误数据。
- 对象比原始类型更具表现力。 我们既有null值又有integer值,因此可以使用注释(例如javax.validation.constraints.NotNull)更轻松地验证它们。