JPA / Hibernate:我可以拥有没有注释的父级和带有子级的子级

时间:2009-08-13 21:02:22

标签: hibernate jpa annotations

我需要创建一个可以独立使用或在更大的应用程序中使用的组件。独立使用时,它不应该需要数据库,也不需要任何与数据库/ ORM相关的依赖项。当用作较大应用程序的一部分时,某些类确实会通过JPA / Hibernate持久保存到数据库中。

我在想组件中的域对象没有任何注释(由于要求不具有任何与ORM相关的依赖关系)。在较大的应用程序中,我会对这些域对象进行子类化...这就像我做的那样。

通常,我使用字段级注释。是否有可能与上述情况一致?我在想它不是。

另一个想法我不得不切换到注释属性。在这种情况下,我扩展了未注释的域对象,覆盖了所有属性,&注释那些。孩子只是一个带有所需注释的代表。这似乎是很多工作/代码。

具有讽刺意味的是,如果我使用hbm.xml,我认为这将更容易实现,我们最近已经离开了。我错过了带注释的内容吗?

2 个答案:

答案 0 :(得分:3)

JPA注释实际上是您唯一的依赖项。如果有人以POJO(非DB)的方式使用你的对象,那么他们需要的就是JPA注释jar,对于大多数应用服务器来说,无论如何它实际上都在类路径上。

当然只是将注释作为依赖是非常合理的,这并不是说您需要拖入整个休眠状态并且它是很多朋友。

另一种选择就是你已经解决了将hbm用于这个实体的问题。这并不是那么糟糕,因为hibernate非常乐意在一个SessionFactory中混合注释和hbm样式实体,你仍然可以使用字段访问,所以不需要破坏你的类的公共接口。

答案 1 :(得分:0)

如果您对无依赖性的要求是严格的,那么我建议关注它, 甚至避免注释依赖。

不会对域对象进行子类化,只是为了注释它们。 我认为这比帮助更麻烦 子类化在一个实体上很容易,但在引用的实体上它变得混乱。 您必须子类化所有实体,重做所有构造函数(因为它们不是继承的)等等。

对我来说,在这种情况下, xml配置非常适合。 虽然有些人(我喜欢)更喜欢注释,但xml仍然有效。 它经过了防火测试,记录完备,众所周知,并且随时可用。

  

如果您真的不想编写xml,可以使用HibernateTools生成它,最好是从您的数据库生成(但其他选项也可以,该工具是通用的)。

如果对注释的需求非常强烈,我会转向代码生成。 我会使用注释创建我的域对象。 然后我会从中生成类的非注释版本,只需删除注释。

  

这些类会有所不同......这可能会影响您的其余代码。如果它们具有相同的全名(但在给定的配置中只提供了一个),您可能会针对每个版本编译代码...如果您需要使用它们而不重新编译,您还可以生成一个公共父接口(没有注解)...