我观察到一个奇怪的事实(基于hibernate标记中的问题),人们仍在积极使用xml文件而不是注释来指定它们的ORM(Hibernate / JPA)映射。
在少数情况下,这是必要的:
但我认为这些并不常见。
我的假设是:
还有其他可能的解释吗?
答案 0 :(得分:50)
域层和持久层被一些人认为是单独的问题。使用纯XML方法可以使两个层尽可能松散耦合;当你在域代码中嵌入了与持久性相关的代码时,使用注释会更紧密地耦合这两层。
答案 1 :(得分:20)
答案 2 :(得分:9)
啊,但他们不是。我注意到的三个案例(可能还有更多)你不能用注释来做(好):人们不知道注释是什么 xml的全功能替代品 映射。
不要误解我的意思 - 注释很棒;当他们与Validator结合时,他们会加倍(尽管如此,上面的#3会杀死这个问题上的嗡嗡声)。它们还提供了XML映射所不具备的功能的某些方面。
答案 3 :(得分:4)
使用XML来补充需要环境或系统特定配置的注释。
答案 4 :(得分:3)
我最初发现注释语法非常奇怪。它看起来像线路噪音,并与我通常放置评论的地方混合在一起。它比处理XML文件要好得多,因为所有的更改都在一个地方,即模型文件。也许注释的一个限制是可能与其他注释发生冲突,但我还没有看到它。
我认为它没有被更多使用的真正原因是它并不真正被认为是默认的。您必须使用其他jar文件。它应该是核心的一部分,XML方法应该是可选的。
答案 5 :(得分:3)
一些信息在注释中很好地传递,例如实体之间关系的基数。这些注释提供了有关模型本身的更多细节,而不是模型与其他内容的关系。
但是,绑定,无论是持久性存储还是XML或其他任何东西,都是模型的外在因素。它们根据使用模型的上下文而变化。将它们包含在模型中与在HTML中使用内联样式定义一样糟糕。我使用外部绑定(通常 - 但不一定是XML)文档的原因与引用外部CSS的原因相同。
答案 6 :(得分:3)
我已经切换到注释,但有时我会错过XML映射,主要是因为文档更加全面,包含许多场景的示例。使用注释,我坚持使用非常基本的映射(如果你控制数据和对象模型,这很好),但我在XML中做了一些非常复杂的事情,如果我可以在注释中复制,我不知道。 / p>
答案 7 :(得分:2)
因此,如果要将类部署到多个数据存储区。你想要将列定义注释到它吗?不同的数据存储有不同的约定等,在这种情况下使用XML是唯一理智的地方,能够有一个用于MySQL,一个用于Derby,一个用于Oracle或其他。如果您愿意,您仍然可以使用基本的持久性/关系注释,但在这种情况下,特定于模式的内容会进入XML。
- 安迪(DataNucleus)
答案 8 :(得分:1)
我有一个新的:http://www.summerofnhibernate.com/
非常好的截屏系列尚未涵盖注释。我用它编写了一些应用程序来学习基础知识,不是为了我的工作,而是出于好奇,但从未迁移到注释。建议仍然与SO相关的系列。如果我有更多的业余时间,我仍然会迁移到注释,但暂时我可以成为提问的人之一。
答案 9 :(得分:1)
我参与了一个数据库频繁更改的项目,我们每次都要重新生成java文件和配置文件。实际上我们并没有使用hibernate工具生成的所有关系和配置。所以基本上我们使用该工具,然后修改/调整它们。
因此,当您想要修改/调整默认配置时,与通过注释进行操作相比,在XML文件中更容易。
答案 10 :(得分:1)
我觉得如果我们不使用Annotations,它会使代码更具可读性。如果配置信息频繁更改,使用Annotations可以提供帮助,但以web.xml为例,该更改中的信息有多少次,那么为什么要为Servlet使用注释。
答案 11 :(得分:0)
我们继续使用XML,因为通常对于已部署的站点,获取批准安装的修补程序(二进制代码)需要时间,而您可能没有。对ASCII文件(例如xml文件)的更新被认为是配置更改而不是补丁......
吨