我如何支持 class 我不拥有的源代码的 jpa 数据库序列化?
How can I support jpa database serialization of a class who's source code I don't own?
如果我有一个实体,我想在 JPA2 中持久保存到数据库中,我只需添加 @Entity 注释,以及指定其关系的任何其他注释,等等。
我有几个 class 来自不属于我的依赖项,我想用它们来做这件事。我正在考虑一些想法,但我对其中任何一个都不是很满意。
创建一个 "empty" subclass,将所有调用委托给真正的 class。空的 subclass 将是持有配置注释的。我不确定这是否可行,因为我认为您需要向 superclass.
添加注释
使用属性转换器。如果我不关心使用我为关系导入的那个实体,这就可以了。我现在已经在为一些枚举做这个了。
我想我可以用 persistence.xml
配置它?但我想不惜一切代价避免这种情况。
再举一个我正在尝试做的例子,在 Spring 中,您通常通过在 bean 上放置 @Componeont 并用其他 JPA 注释装饰 class 来配置 bean。但是,如果您不拥有 class,Spring 有一个带有 @Bean 注释的简单机制,您可以在其中创建和配置 class 方法内部的 @Configuration class 调用以获取对该实体的引用。这样您就可以使用第三方库作为 beans 而无需访问源代码。
首先,无论你是否拥有class你想坚持的,你都不应该用@Entity
来注释你的业务实体。这背后的原因很简单:数据库是一个 I/O 频道。 I/O频道是一个细节。您的业务逻辑应该独立于细节。
您应该将业务实体映射到 DTO,该 DTO 被传递到 DAO,然后 DAO 将其映射到数据库实体并保留它。不要相信我,this opinion actually stems from uncle Bob。
所以答案是:将实体转换为DTO,将这个DTO传递给相应的DAO,DAO再次将其转换为某个数据库对象并持久化。
我最终使用 orm.xml 将 JPA 映射提供给 java 类 我不控制其源代码。
如果我有一个实体,我想在 JPA2 中持久保存到数据库中,我只需添加 @Entity 注释,以及指定其关系的任何其他注释,等等。
我有几个 class 来自不属于我的依赖项,我想用它们来做这件事。我正在考虑一些想法,但我对其中任何一个都不是很满意。
创建一个 "empty" subclass,将所有调用委托给真正的 class。空的 subclass 将是持有配置注释的。我不确定这是否可行,因为我认为您需要向 superclass.
添加注释
使用属性转换器。如果我不关心使用我为关系导入的那个实体,这就可以了。我现在已经在为一些枚举做这个了。
我想我可以用
persistence.xml
配置它?但我想不惜一切代价避免这种情况。
再举一个我正在尝试做的例子,在 Spring 中,您通常通过在 bean 上放置 @Componeont 并用其他 JPA 注释装饰 class 来配置 bean。但是,如果您不拥有 class,Spring 有一个带有 @Bean 注释的简单机制,您可以在其中创建和配置 class 方法内部的 @Configuration class 调用以获取对该实体的引用。这样您就可以使用第三方库作为 beans 而无需访问源代码。
首先,无论你是否拥有class你想坚持的,你都不应该用@Entity
来注释你的业务实体。这背后的原因很简单:数据库是一个 I/O 频道。 I/O频道是一个细节。您的业务逻辑应该独立于细节。
您应该将业务实体映射到 DTO,该 DTO 被传递到 DAO,然后 DAO 将其映射到数据库实体并保留它。不要相信我,this opinion actually stems from uncle Bob。
所以答案是:将实体转换为DTO,将这个DTO传递给相应的DAO,DAO再次将其转换为某个数据库对象并持久化。
我最终使用 orm.xml 将 JPA 映射提供给 java 类 我不控制其源代码。