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
Java 5个持久类的非持久超类,带有相同的3个持久字段?_Java_Jpa_Object Persistence - Fatal编程技术网

Java 5个持久类的非持久超类,带有相同的3个持久字段?

Java 5个持久类的非持久超类,带有相同的3个持久字段?,java,jpa,object-persistence,Java,Jpa,Object Persistence,我解决不了这个问题。 谁能告诉我有可能解决这个问题吗 我有一个五表数据库,需要5个持久类 所有5个都需要携带这3个字符串字段: 场1,场2,场3 不过。5个持久化类中的每一个都将它们的不同组合持久化,而其他的则是@transient。以下是五个持久类: Persistent @Trasient 1 field1, field2 field3 2. all 3 none 3. field2 field1, f

我解决不了这个问题。
谁能告诉我有可能解决这个问题吗

我有一个五表数据库,需要5个持久类

所有5个都需要携带这3个字符串字段:
场1,场2,场3

不过。5个持久化类中的每一个都将它们的不同组合持久化,而其他的则是@transient。以下是五个持久类:

    Persistent         @Trasient
1   field1, field2     field3
2.  all 3              none
3.  field2             field1, field3
3.  none               all 3
4.  field1, field3     field 2
5.  field 1            field2, field3
我想对get/set方法进行超级分类

(在接受它们之前,有很多相同的代码用于测试它们。)

可能吗

我想答案是否定的。 但我想我会检查一下


谢谢。

这似乎是不适合注释元数据的用例之一

JPA允许您用XML元数据覆盖、补充或替换注释。在您描述的场景中,我认为最好在XML元数据中定义持久/暂时字段


您可能需要检查或此关闭以了解更多详细信息。

这似乎是不适合注释元数据的用例之一

JPA允许您用XML元数据覆盖、补充或替换注释。在您描述的场景中,我认为最好在XML元数据中定义持久/暂时字段


您可能需要查看或此关闭以了解更多详细信息。

我认为一个真实的示例对于理解您试图解决的问题更有用。为了数据而继承听起来很糟糕。如果你不想有一大堆getter和setter,你可以看看。具体的例子:我的数据库有五个表,出于各种原因,它们存储id、pw和hash。一个表包含所有3个字段。其他表有1或2的字段,但不是全部。但出于其他原因,我希望作为实体使用的所有三个POJO类都携带这三个变量。所以一个普通的父母是很有吸引力的。我认为一个现实生活中的例子对于理解你试图解决的问题会更有用。为了数据而继承听起来很糟糕。如果你不想有一大堆getter和setter,你可以看看。具体的例子:我的数据库有五个表,出于各种原因,它们存储id、pw和hash。一个表包含所有3个字段。其他表有1或2的字段,但不是全部。但出于其他原因,我希望作为实体使用的所有三个POJO类都携带这三个变量。所以一个普通的父母很有吸引力。谢谢。答案似乎是不,我不能。因此,将这三个变量中的每一个添加到我用作实体的每个类中似乎比在XML元数据中乱搞更容易。您仍然可以拥有一个包含这三个变量以及getter和setter的基类(例如,all
@Transient
)。在您的子类中,您将只覆盖要持久化的getter,只需在实现中调用
super.getField()
。我认为这是最接近你想要的。但您不必担心XML,因为它允许您实际保留一个Java类并使用各种选项多次映射它。为了进一步解决您的失望,请这样想:注释是保留在代码中的元数据,只要它们能够自然映射。如果他们不这样做(就像在这个特殊情况下),您必须编写代码以便对其进行注释,或者将元数据移到代码之外(转换为任何可用的外部格式)。我总是选择后者。如果你决定不再在你的项目中使用JPA,你会得到一堆无用的类,它们只是用来放置注释的地方。所以“在XML元数据中乱搞”可能是值得的。再次感谢。我经常尝试,但Jboss和Oracle文档作者个人似乎对任何不知道答案的人都会阅读他们的材料感到不快。这里希望有一天,任何一方决定雇佣擅长文档编制的人员。但现在我发现他们的材料只对不需要的人有用。这就像询问如何驾驶汽车,并得到一个讲座,告诉你如何在开车时改变电台。令人印象深刻的附加信息。。。但只有在你知道如何移动它之后。我忘了提到使用super是。。。好。。在我的例子中,有很多代码在setter中,这是一个非常好的主意。但愿我先想到它。它确认了我可以用子字段中的持久字段覆盖非持久父字段。一开始你觉得很明显,但对我来说却变得很明显。再次感谢,谢谢。答案似乎是不,我不能。因此,将这三个变量中的每一个添加到我用作实体的每个类中似乎比在XML元数据中乱搞更容易。您仍然可以拥有一个包含这三个变量以及getter和setter的基类(例如,all
@Transient
)。在您的子类中,您将只覆盖要持久化的getter,只需在实现中调用
super.getField()
。我认为这是最接近你想要的。但您不必担心XML,因为它允许您实际保留一个Java类并使用各种选项多次映射它。为了进一步解决您的失望,请这样想:注释是保留在代码中的元数据,只要它们能够自然映射。如果他们不这样做(就像在这个特殊情况下),您必须编写代码以便对其进行注释,或者将元数据移到代码之外(转换为任何可用的外部格式)。我总是选择后者。如果你决定不再在你的项目中使用JPA,你会得到一堆无用的类,它们只是用来放置注释的地方。所以“在XML元数据中乱搞”可能是值得的