为什么人们继续使用xml映射文件而不是注释?

Boz*_*zho 37 java orm annotations hibernate jpa

我观察到一个奇怪的事实(基于hibernate标记中的问题),人们仍在积极使用xml文件而不是注释来指定它们的ORM(Hibernate/JPA)映射.

有几种情况,这是必要的:

  • 您正在使用提供的类,并且您想要映射它们.
  • 您正在编写一个API,其域类可以在没有JPA提供程序的情况下使用,因此您不希望强制使用JPA/Hibernate依赖项.

但我认为这些并不常见.

我的假设是:

  • 人们习惯于使用xml文件,感觉不舒服/不想学习使用注释方法.
  • Java 1.5之前的版本被强加于项目,并且没有任何关系
  • 人们不知道注释是xml映射的全功能替代品.
  • 支持遗留系统,因此改变方法被认为是有风险的
  • 人们担心将注释(元信息)与他们的类混合是错误的.

还有其他可能的解释吗?

小智 51

域层和持久层被一些人认为是单独的问题.使用纯XML方法可以使两个层尽可能松散耦合; 当您在域代码中嵌入与持久性相关的代码时,使用注释会更紧密地耦合两个层.

  • 这是一个公平的观点,虽然我不认为那时的耦合是有害的.除了运行时依赖性之外,可以使用对象,就好像它们与peresistence元数据分离一样.而持久性元日期,嗯,没有域对象就不能使用它. (7认同)

Bal*_*usC 20

  • 缺乏对已映射内容的概述.你需要挖掘源代码.


Chs*_*y76 9

人们不知道注释是xml映射的全功能替代品.

啊,但他们不是.我的头顶有三个案例(可能更多)你不能用注释做(好):

  1. 使用公式作为关联键的一部分(诚​​然,相当深奥).
  2. Join-via-subselect - @Loader不是一个充分的替代品.不是太普通,但非常有用的.Envers提供了一种可行的替代方法.
  3. 丢失模式生成的列顺序.这是一个绝对的杀手.我明白为什么会这样做,但它仍然让我感到厌烦.

不过,不要误会我的意思 - 注释很棒; 当他们与Validator结合时,他们会加倍(尽管如此,上面的#3会杀死这个问题上的嗡嗡声).它们还提供XML映射不具备的某些功能方面.