2

私は現在、いくつかのクリーンでアノテーションのない Java POJO ドメイン モデルを開発したクライアントのために働いています。すべてのドメイン モデルには、約 15 ~ 50 のクラスが含まれます。これまでのところ、これらの Java POJO ドメイン モデルは Android アプリでのみ使用されています。私のクライアントが行っている新しいプロジェクトでは、これらのドメイン モデルのサーバー側を使用し、それらのクラスのインスタンスを SQL データベースに保存する必要があります。

これにはJPAを使用します。jar は既存の Android アプリで再利用する必要があるため、JPA アノテーションを使用することはできません。したがって、これらの 100 以上のクラスの JPA xml マッピングを作成する必要があります。

私は疑問に思っていました:いくつかのlib/toolを使用して、クリーンなJavaクラス/POJOからJPA Xmlマッピングを自動生成することは可能ですか? 探し始めたとき、「javamodel 2 jpa xml マッピング」ツールをすぐに見つけられると思っていましたが、これまでのところ運がなく、すでにしばらく探していました。

私には、それは多くのシナリオで役立つツールのように思えるので、それが存在しないとはほとんど信じられません.

hbm2java などのツールについて知っています。私は、ddl から POJOS/orm マッピングを作成し、orm マッピングから POJOS/DDL を作成できることを知っています。しかし、POJO を指定して orm マッピングが必要です。

また、JPA xml マッピングはかなり短くなる可能性があり、単純/基本的なプロパティは自動的にマッピングされることも知っています。すべてのプロパティをマッピングする必要はないことはわかっていますが、そのようなツールが存在しない場合でも、多くの反復作業に直面しています。

では、「javamodel 2 jpa xml マッピング」ツールは存在しますか?

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 に答える