在休眠实体中保留数据库约束是否合适?

时间:2016-09-20 05:28:00

标签: java mysql hibernate

当我重构代码库时,我通过像

这样的hibernate注释来实现
@Column(name = "personal_email", nullable = true, length = 64)
private String personalEmail;
USER 实体中的

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

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

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

我认为保留此类注释的唯一好处是它不会将错误数据传播到数据库级别。

我想知道你的建议......

无论如何,我将在DB中更改personalEmail的列宽。

1 个答案:

答案 0 :(得分:2)

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

也许这个列表可以帮到你。

Hibernate的优势

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

Hibernate的优势

  • 每个约束修改都要编译。不存在运行时更改,因此可以进行更多维护(服务器重启,等等)。

数据库的优势

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

  • 必要时在运行时进行约束更改(建议不要小心)。

数据库的缺点

  • 不在相同的代码库中。违规行为可能很难找到。

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