代码之家  ›  专栏  ›  技术社区  ›  Jamie Bisotti

jpa/hibernate:我可以有一个没有注释的父级和一个带有注释的子级吗?

  •  3
  • Jamie Bisotti  · 技术社区  · 15 年前

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

    我在想组件中的域对象不会有任何注释(因为需要没有任何与ORM相关的依赖关系)。在更大的应用程序中,我会将这些域对象分类……这差不多是我所做的。

    通常,我使用字段级注释。是否可能由于上述情况而导致?我想不是。

    另一个认为我必须切换到注释属性。在这种情况下,我将扩展未注释的域对象,覆盖所有属性,并注释这些属性。子代将只是具有所需注释的委托。这看起来像是很多工作/代码。

    具有讽刺意味的是,我认为如果我使用hbm.xml,这将更容易实现,我们最近已经不再使用它了。我是不是遗漏了一些注释?

    2 回复  |  直到 15 年前
        1
  •  3
  •   Gareth Davis    15 年前

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

    当然,将注释作为依赖项是非常合理的,这不像你需要在整个Hibernate中拖拽,它是许多朋友。

    另一种选择是,正如您已经制定的那样,将HBM用于该实体。这并没有那么糟糕,因为Hibernate非常乐意在单个会话工厂中混合注释和HBM样式的实体,而且您仍然可以使用字段访问,因此不需要破坏类的公共接口。

        2
  •  0
  •   KLE rslite    15 年前

    如果你对不依赖的要求是严格的 ,那么我建议遵循它, 甚至避免注释依赖。

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

    对我来说 XML配置适合 在这种情况下。 尽管有些人(我确实)喜欢注释,但是XML仍然有效。 它经过防火测试,文件齐全,知名度高,随时可用。

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

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

    那课程就不一样了。这可能会影响其他代码。如果它们有相同的全名(但在给定的配置中只提供了一个),您可能会针对每个版本编译代码…如果您需要在不重新编译的情况下使用其中一个接口,您还可以生成一个公共的父接口(不带注释)。