java - 在 hibernate 实体中保留数据库约束是否有好处

标签 java mysql hibernate

当我重构代码库时,我遇到了像

这样的 hibernate 注释
@Column(name = "personal_email", nullable = true, length = 64)
private String personalEmail;

USER实体中...如果personalEmail超过64个字符,实际上会出现数据截断错误。

我个人认为保留这样的注释是一种不好的做法。我认为我们不必通过数据库实体元信息破坏我们的代码。

我的方法是删除长度和可为空的注释名称,并让数据库在发生任何约束违规时发出通知。

我认为保留这种类型注释的唯一优点是它不会将错误的数据传播到数据库级别。

我想知道你的建议...

无论如何,我将更改数据库中个人电子邮件的列宽。

最佳答案

这取决于您更信任哪个系统。 Hibernate (Java) 或您的数据库。

也许这个列表会对您有所帮助。

Hibernate 的优点

  • 是跟踪同一代码库中的约束。不会在两个系统之间切换来检查它们。
  • 请随意提供有关用户和您自己的日志文件的更多详细信息。

Hibernate 的缺点

  • 每个约束修改都必须进行编译。不可能进行运行时更改,因此需要更多维护(服务器重新启动等)。

数据库的优点

  • 您可以从 JavaEE/JavaSE 更改为任何其他系统。

  • 如有必要,请在运行时更改约束(小心,不推荐)。

数据库的缺点

  • 不在同一个代码库中。违规行为可能很难被发现。

  • 更多 Java 代码可翻译更具体的用户信息。数据库日志对用户不友好。

关于java - 在 hibernate 实体中保留数据库约束是否有好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39586312/

相关文章:

java - 尽管 RetentionPolicy 为 RUNTIME,但无法通过反射查看注释

php - 如何将记录从Server1 db1 table1复制到Server2 db2 table2?

spring - hibernate模块的类加载器看不到hibernate-c3p0

hibernate 异常 : Connection Pool exhausted error after Spring upgrade

hibernate - 使用鉴别器值查询数据库

Java 字符串比较 : style choice or optimization?

java - 动态 JPanel 调整大小问题

java - 具有多个输入数字和运算符的命令行计算器?

MYSQL delete - 表 'USER_TABLE' 被指定两次,既作为 'DELETE' 的目标,又作为单独的数据源

Mysql - 多列分组