Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JPA/Hibernate:我可以有一个没有注释的父对象和一个有注释的子对象吗_Hibernate_Jpa_Annotations - Fatal编程技术网

JPA/Hibernate:我可以有一个没有注释的父对象和一个有注释的子对象吗

JPA/Hibernate:我可以有一个没有注释的父对象和一个有注释的子对象吗,hibernate,jpa,annotations,Hibernate,Jpa,Annotations,我需要创建一个可以独立使用或在更大的应用程序中使用的组件。单独使用时,它不需要数据库,也不需要任何与数据库/ORM相关的依赖项。当作为更大的应用程序的一部分使用时,某些类确实会通过JPA/Hibernate持久化到数据库中 我认为组件中的域对象不会有任何注释(因为不需要任何与ORM相关的依赖项)。在更大的应用程序中,我会对这些域对象进行子分类……这大概是我所做的 通常,我使用字段级注释。是否有可能根据上述场景进行调整?我想不是 另一个认为我必须切换到注释属性。在这种情况下,我会扩展未注释的域对象

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

我认为组件中的域对象不会有任何注释(因为不需要任何与ORM相关的依赖项)。在更大的应用程序中,我会对这些域对象进行子分类……这大概是我所做的

通常,我使用字段级注释。是否有可能根据上述场景进行调整?我想不是

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


具有讽刺意味的是,我认为如果我使用hbm.xml,这将更容易实现,而我们最近已经不再使用hbm.xml。我缺少注释吗?

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

当然,将注释作为依赖项是非常合理的,您不需要将整个hibernate拖入其中,它有很多朋友


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

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

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

对我来说,xml配置非常适合这种情况。 尽管有些人(我确实)更喜欢注释,但xml仍然有效。 它经过防火测试,有很好的记录,众所周知,而且随时可用

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

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

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


使用hbm.xml格式是不可能的,因为我们还使用Enver对实体进行历史/审计跟踪,并且需要注释(目前)。我想最好的办法可能是退后一步,尽量减少依赖性。我只是希望我忽略了其他简单/明智的解决方案。