2016-09-20 70 views
1

而我重构代码库我通过Hibernate注释中USER实体来了,如同它是很好的保持DB约束休眠实体

@Column(name = "personal_email", nullable = true, length = 64) 
private String personalEmail; 

...居然有数据截断错误,如果personalEmail超过64个字符。

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

我的方法是我将删除长度和可为空的注释名称,并让DB在任何违反约束的情况下通知。

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

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

反正我会改变列宽personalEmail在DB。

回答

2

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

也许这个清单会帮助你。

优势休眠

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

Disdvantages对于Hibernate

  • 每个约束修改必须被编译。没有可能的运行时变化,因此更多的维护(服务器重启,等等)。

优势,为数据库

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

  • 如果需要,在运行时进行约束更改(小心不要推荐)。

缺点数据库

  • 不在同一个代码库。违规可能很难找到。

  • Java中的更多代码可用于转换更具体的用户信息。数据库日志不方便用户使用。

+1

实际上,这取决于您是否通过休眠或不休眠来创建数据库模式。如果没有,那么在注释中没有任何优势(除了可能用于信息目的)。 – Kayaman

+0

我正在考虑改变约束,而运行时不应该这样做。 http://dba.stackexchange.com/questions/27153/alter-table-on-live-production-databases –

+0

对不起,我真的不明白你在说什么。 – Kayaman