2016-05-02 11 views
0

私のプロジェクトはSOAP Webサービスと通信しており、wsdlファイルから自動生成されたクラスがたくさんあります。Webサービス呼び出しからのデータをデータベースに保存

私はWebサービスコールを作成するときに、応答の情報をデータベースに保存したいが、できる限り定型コードを書きたいので、すべての属性、ゲッター、セッターを複製する必要はありません。 Webサービスクラスから。

私は何をしたいと思いますが、このようなもの(単純化)である:

WebserviceClass[] foo = WebserviceCall.getFoos(); 
for (WebserviceClass bar : foo){ 
    db.save(bar); 
} 

私のプロジェクトは春ブーツに私は春データは、Hibernateなどを見ているが、私は見つけるすべてのソリューションれていています私自身のクラスをたくさん書いてから、Webserviceクラス(属性、ゲッター、セッターの重複を多く必要とする)からインスタンス化する必要があります。

自動生成されたクラスまたはwsdlファイルからスキーマを構築する方法はありますか?基本的にすべてのWebサービスクラスを書き換える必要なく、マッピングを記述できますか?

これは解決された問題だと思われますが、解決策が見つかりませんでした。私は行方不明のものがありますか?ベストプラクティスは何ですか?

答えて

0

生成されたクラスを拡張し、@AttributeOverrideを使用してJPAでマップすることができます。

@Entity(name="EVENT") 
@AttributeOverrides({ @AttributeOverride(name="id", [email protected](name="EVENT_ID",nullable=false)), 
    @AttributeOverride(name="name", [email protected](name="EVENT_NAME",nullable=false,length =50)), 
    @AttributeOverride(name="date", [email protected](name="EVENT_DATE_UTC", nullable=false)), 
    @AttributeOverride(name="dateLocal", [email protected](name="EVENT_DATE_LOCAL", nullable=false)), 
    @AttributeOverride(name="state", [email protected](name="STATE",nullable=false)), 
    @AttributeOverride(name="operator", [email protected](name="OPERATOR")), 
    @AttributeOverride(name="deviceId", [email protected](name="DEVICE_ID",nullable=false)), 
    @AttributeOverride(name="deviceType", [email protected](name="DEVICE_TYPE")), 
    @AttributeOverride(name="deviceDescription", [email protected](name="DEVICE_DESCRIPTION")), 
    @AttributeOverride(name="description", [email protected](name="EVENT_DESCRIPTION")), 
    @AttributeOverride(name="priority", [email protected](name="PRIORITY",nullable=false)), 
    @AttributeOverride(name="attachment", [email protected](name="ATTACHMENT")), 
    @AttributeOverride(name="mimeType", [email protected](name="MIME_TYPE")), 
}) 
public class DbClass extends GeneratedClass { 

    public DbClass(GeneratedClass generatedClass) { 
     this.setName(generatedClass.getName()); 
     this.setDateLocal(generatedClass.getDateLocal()); 
     ... 
    } 


    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Override 
    public long getId() { 
     return super.getId(); 
    } 

    public void setId(long id) { 
     super.setId(id); 
    } 

そしてDbClass上で春のデータリポジトリを使用して:

springDataRepository.save(new DbClass(generatedClass)); 

それは非常にきれいなアプローチではありませんが、それは動作します。

+0

クラス宣言に 'DClass'がありますが、コンストラクタには' DbClass'と書かれていると推測していますか? しかし、 'super(generatedClass);'コンストラクタ呼び出しはどのように機能しますか?私の 'GeneratedClass'は' GeneratedClass() 'コンストラクタを持っていますが、' super(generatedClass);を呼び出すことはできません; "適切なコンストラクタが見つかりません"というエラーが発生しました – Alfons

+0

それは本当です。すべての属性を手動で設定できます。私は答えを編集しました。 –

+0

基本的に、 'AttributeOverrides'アノテーションは、' GeneratedClass'のどの属性をデータベースに保持し、どのカラム名の下にリストするのですか? – Alfons

関連する問題