2

我目前正在为一个开发了几个干净、无注释的 Java POJO 域模型的客户工作。每个领域模型包含大约 15-50 个类。到目前为止,这些 Java POJO 领域模型只在 Android 应用程序中使用过。对于我的客户正在进行的一个新项目,有必要在服务器端使用这些域模型,并将其类的实例保存到 sql 数据库中。

我们将为此使用 JPA。由于 jar 需要在现有的 Android 应用程序中重用,因此不能选择使用 JPA 注释。因此,我需要为这 100 多个类创建 JPA xml 映射。

我想知道:是否可以使用一些 lib/工具从干净的 Java 类/POJO 中自动生成 JPA Xml 映射?当我开始寻找时,我以为我会很快找到一个“javamodel 2 jpa xml mapping”工具,但到目前为止,没有运气,我已经找了一段时间了。

对我来说,它似乎是一个可以在大量场景中使用的工具,所以我几乎不敢相信它不存在。

我知道诸如 hbm2java 之类的工具。我知道可以从 ddl 创建 POJOS/orm 映射,从 orm 映射创建 POJOS/DDL。但是我需要给定 POJO 的 orm 映射。

另外,我知道 JPA xml 映射可以很短,并且简单/基本属性是自动映射的。我意识到我不必映射每个属性,但是如果不存在这样的工具,我仍然面临大量重复性工作。

那么,是否存在“javamodel 2 jpa xml mapping”工具?

4

3 回答 3

4

我为此创建了一个简单的工具,托管在 Github:https ://github.com/IntegratingStuff/java2jpa

基本用法示例:

Java2JpaMappingGenerator java2JpaMappingGenerator = 
   new Java2JpaMappingGenerator(); 
java2JpaMappingGenerator.setRenderJpaMappingForClassStrategy(
   new RenderJpaMappingForClassStrategyDefaultImpl()); 
JpaMappingRendererDefaultImpl jpaMappingRenderer = 
   new JpaMappingRendererDefaultImpl("target/META-INF/orm.xml");
java2JpaMappingGenerator.setJpaMappingRenderer(jpaMappingRenderer);  
java2JpaMappingGenerator.generateJpaMappingsForPackages("com.test.model");
jpaMappingRenderer.createMappedFiles();

使用此工具,您可以从 Java POJO 域模型创建 JPA Xml 映射。但是,您通常需要为您自己的模型创建 RenderJpaMappingForClassStrategy 接口的自定义实现,以便有效地使用该工具。

于 2013-04-15T05:12:05.963 回答
2

也许是愚蠢的想法,但是批处理生成器如何使用 JPA @Annotation 标签创建 fasade/proxy .java 文件。大秀停止可能是您的应用程序必须使用 JPACustomer 类型而不是真正的类型。只有一个建议不要杀死信使。

@Entity
@Table(name="customer")
public class JPACustomer extends Customer {

  @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
  public long getId() { return super.getId(); }
  public void setId(long id) { super.setId(id); }

  @Column(name="name")
  public String getName() { return super.getName(); }
  public void setName(String s) { super.setName(s); }

  // ElementCollection provides simple OneToMany linking in OpenJPA.
  // joinColumn.name=foreign key column in child table
  @ElementCollection(fetch=FetchType.LAZY)
  @CollectionTable(name="cust_role", joinColumns={@JoinColumn(name="cust_id")})
  @Column(name="role")
  public List<String> getRoles() { return super.getRoles(); }
  public void setRoles(List<String> roles) { super.setRoles(roles); }

  ...
}
于 2013-03-26T19:09:05.270 回答
0

我建议使用 Eclipse 的 JPA 支持(Dali)

于 2013-03-27T14:36:24.727 回答