Java注释和继承

Java注释和继承,java,serialization,nosql,pojo,Java,Serialization,Nosql,Pojo,我有一个Person类,用于保存数据。我在一个做一些逻辑的库中使用这个类。例如:计算此人的出生年份此库还可以创建新人。 在另一个使用上述库的项目中,我需要将Person类序列化到数据库中。为此,我使用第三方库。按照惯例,我可以在特定字段上放置自定义注释,以便序列化它们 所以我有很多个人的例子。我想把它们转换成personanNatedDB实例。PersonannonatedDB扩展Person,不添加新方法或成员。PersonannonatedDB确实添加了注释来告诉DB如何序列化它,但仅此而已

我有一个Person类,用于保存数据。我在一个做一些逻辑的库中使用这个类。例如:计算此人的出生年份此库还可以创建新人。

在另一个使用上述库的项目中,我需要将Person类序列化到数据库中。为此,我使用第三方库。按照惯例,我可以在特定字段上放置自定义注释,以便序列化它们

所以我有很多个人的例子。我想把它们转换成personanNatedDB实例。PersonannonatedDB扩展Person,不添加新方法或成员。PersonannonatedDB确实添加了注释来告诉DB如何序列化它,但仅此而已

有没有什么方法可以从Person创建PersonannonatedDB而不必编写冗长的副本构造函数

我不介意用一般注释来注释人。我只是不想将特定于数据库的注释添加到我的库项目中,因为我以后可能会使用其他数据库


基本上,我希望在编写最少的粘合代码时,将数据层与持久层分离。

一种方法是将类Person扩展到PersonAnnotatedDB,其中类的一个成员是Person,一个成员是注释。 不会有重复的Person数据,只是对Person实例的引用


然后,这一切都取决于您想要如何创建、使用或将它们和原始用户同步。

继承:您绝对不能在“类?扩展用户”中用新注释装饰原始类的字段(它们是私有的,对吗?您甚至不能引用它们)


您关于将该类(某些应用程序、某些库等)放在何处的决定是错误的。您必须将该类移动到应用程序中,并对其进行适当的修饰以实现持久性。

一种方法是将Hibernate与。这将您的代码与持久性设置完全分离,并且不再需要扩展Person对象。

我不知道我是否正确地遵循了这一点,因此这可能与您试图执行的操作完全无关,但是查看
super
关键字我不确定super在这方面会有什么帮助。不能从类的超类自动构造类实例。Person是personanonateddb的超类,因此虽然我可以很容易地从personanonateddb构造Person,但我不能做相反的事情。啊,我现在明白你想要什么了。是的,超级帮不了你。很抱歉,为了正确序列化类,在其成员和方法上指定了注释。当内部Person类由外部PersonAnnotatedDB持有时,我可以为其字段指定注释吗?因此,如果我理解正确,您不想向Person添加注释,而只想向PersonAnnotatedDB添加注释。是的。我希望我的逻辑代码不去理会这样一个事实,即人可能存储在特定类型的数据库中。因此,Parson本身不能包含特定于数据库的注释。我可以通过一个接口实现这一点:IPerson,但是我不能用算法代码创建新的人。基本上,我想将我的数据模型与持久层解耦。这能满足您的需要吗?下面是一个带有Class元素的注释示例,其值受使用有界通配符的限制。//类元素受有界通配符限制的单元素注释//注释假定存在此类。类GorgeousFormatter实现格式化程序{…}@PrettyPrinter(GorgeousFormatter.class)公共类Penunia{…}//此注释是非法的,因为字符串不是格式化程序的子类型@PrettyPrinter(String.class)public class Begonia{…}我使用的注释是由我使用的第三方数据库框架提供的。我不能随意改变它们。是的,我也这么猜。我不能将带注释的类放在我的核心逻辑中。我想支持至少两个(或更多)独立的持久性解决方案。如果我直接装饰模型,我将被迫将我的两个构建与每个解决方案链接。那么您将面临某种黑客攻击。:/Java不是为这种情况设计的。这看起来很有用,但是我支持的主要数据库之一是:Amazon DynamoDB,它来自一个简短的Google会话,hibernate不支持。Amazon DynamoDB是一个NoSQL数据库。您不可能使用类似的代码在Java应用程序和RDBMS之间以及Java应用程序和Amazon DynamoDB之间移动数据。因此,让域对象保持原样,使用Hibernate和XML映射与关系数据库交互,并使用其他一些代码与DynamoDB协作。