2017-02-21 9 views
0

同じフィールドを持つ2つのクラスがあります。ただし、1つはJSON 用で、もう1つはJPAエンティティ用です。 JSON オブジェクト(Student)をJPAエンティティ(StudentEntity)に変換したいと思います。私は JSONクラスをJPAクラスに解析しようとしましたが、許可されませんでした。 (Student)Jsonクラスを(StudentEntity)クラスに変換して、JSONクラスの情報をJPA Entity Classのデータベースに保持する方法を教えてください。クラスをコピードーザーを使用しますが、そのためのいくつかのマッピング・フレームワークを使用することができますJava:Jackson(JSON)クラスをEntity(JPA)クラスに変換するクラス

package com.student.entity; 

import java.io.Serializable; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.persistence.Table; 

@Entity 
@Table(name = "Student") 
public class StudentEntity implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @Column(nullable = false, updatable = false) 
    @GeneratedValue 
    private long studentID; 

    private String fName; 
    private String lName; 

    private Address address; 

    public long getStudentID() { 
     return studentID; 
    } 

    public void setStudentID(long studentID) { 
     this.studentID = studentID; 
    } 

    public String getfName() { 
     return fName; 
    } 

    public void setfName(String fName) { 
     this.fName = fName; 
    } 

    public String getlName() { 
     return lName; 
    } 

    public void setlName(String lName) { 
     this.lName = lName; 
    } 

    public Address getAddress() { 
     return address; 
    } 

    public void setAddress(Address address) { 
     this.address = address; 
    } 
} 

package com.ejb.objectmapper.entity.student; 

import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 
import com.fasterxml.jackson.annotation.JsonProperty; 

@JsonIgnoreProperties("studentID") 
public class Student { 
    private long studentID; 
    @JsonProperty 
    private String fName; 
    @JsonProperty 
    private String lName; 

    private Address address; 

    public long getStudentID() { 
     return studentID; 
    } 

    public void setStudentID(long studentID) { 
     this.studentID = studentID; 
    } 

    public String getfName() { 
     return fName; 
    } 

    public void setfName(String fName) { 
     this.fName = fName; 
    } 

    public String getlName() { 
     return lName; 
    } 

    public void setlName(String lName) { 
     this.lName = lName; 
    } 

    public Address getAddress() { 
     return address; 
    } 

    public void setAddress(Address address) { 
     this.address = address; 
    } 
} 
+0

変換メソッドを作成し、getterとsetterを使用してJSONクラスの値を使用して新しいエンティティを作成するのはなぜですか? 明らかに、StudentとStudentEntityを関連付けることはできません。 – Arqan

+0

Converterメソッドは、シンプルで洗練されたソリューションです。コードを読んでいるすべての人が、それが何のためにあるのかを知ることができます。私はあなたが同じタイプのものであることを考えるとフィールドを設定するためにリフレクションを使うことができると思いますが、このような単純なタスクでこれをやっているという考えは私にとってはばかげて聞こえます。 – Arqan

答えて

0

代わりに、Mixin featureをジャクソンに使用することもできます。

これは、可能であればStudentクラスを削除し、JSONをStudentEntityクラスの新しいインスタンスに直接非マーシャルすることを可能にします。

このアプローチは、ウェブアプリケーションの複雑さと、あなたがDTOパターンをどれくらい頼りにしているかによって大きく異なります。 Spring Data RESTこれはかなり成功しています。実際には、JPAを既に使用しているので、(あなたのユースケースに合っていれば)それをお勧めします。そして、多くのことが春と同じように、あなたは「無料」のためにたくさんのものを手に入れます。

+0

これは、@raminrによって提案された方法と似たアプローチですが、ジャクソンの注釈を独立したクラス(またはインターフェイス)に保存することによって懸念を払うことができる点を除きます。 – Maynestream

0

、すなわちドーザー(http://dozer.sourceforge.net)またはMapStruct(http://mapstruct.org

はな単純なものに沸きますas

dozer.map(jsonObject,Entity.class); 
+0

ありがとうございます。私はDozzer Mapperを使用しています。私はAPIを使用せずにそれをやろうとしています。 – greencheese

+0

何もAPIがなければ、手作業でコードを作成する必要があります。DozerやMapstructと本質的に同じです;) – tom

+0

haha​​ ... :) MapStructは私には新しく、私はこれを試します。ありがとう:) – greencheese

0

あなたはMVCのために使用していますか? Spring MVCを使用する場合、JPAエンティティを使用してJSONペイロードを表すことができます。私たちのためにうまく動作します。 @JsonIgnoreのように、動作を制御するためにジャクソンの注釈を使用してください。

2つのクラスは必要ありません。

関連する問題