2017-04-11 11 views
0

私の春のアプリケーションはJSON APIを消費し、JPAを使用してデータベースに保存します。私は適切に設計されたエンタテイメントとモデルの問題に直面しています。JPAのentiteとJSONモデルを構築するには?

@Data 
@Setter(AccessLevel.NONE) 
@Entity 
@Table(name = "TvShows") 
public class TvShowLocal implements TvShowEntity { 

    @Id 
    @GeneratedValue 
    public Integer id; 

    public Integer tvShowId; 

    public String name; 

    public Integer runtime; 

    public String summary; 

    @Column(name = "seasons") 
    @OneToMany 
    @ElementCollection(targetClass = SeasonLocal.class) 
    public List<SeasonLocal> seasons; 

    @Column(name = "episodes") 
    @OneToMany 
    @ElementCollection(targetClass = EpisodeLocal.class) 
    public List<EpisodeLocal> episodes; 

    @Override 
    public List<SeasonEntity> getSeasons() { 
     return new ArrayList<SeasonEntity>(seasons); 
    } 

    @Override 
    public List<EpisodeEntity> getEpisodes() { 
     return new ArrayList<EpisodeEntity>(episodes); 
    } 
} 

ロンボク注釈が自動的にゲッター/セッターを実装し@data:ように見える

@Data 
@Setter(AccessLevel.NONE) 
@JsonIgnoreProperties(ignoreUnknown = true) 
public class TvShowRemote implements TvShowEntity { 
    @JsonProperty("id") 
    public Integer id; 
    @JsonProperty("url") 
    public String url; 
    @JsonProperty("name") 
    public String name; 
    @JsonProperty("summary") 
    public String summary; 
    @JsonProperty("updated") 
    public Integer updated; 
    @JsonProperty("_embedded") 
    public Embedded embedded; 

    public List<SeasonEntity> getSeasons() { 
     return new ArrayList<SeasonEntity>(embedded.getSeasons()); 
    } 

    public List<EpisodeEntity> getEpisodes() { 
     return new ArrayList<EpisodeEntity>(embedded.getEpisodes()); 
    } 
} 

私のJPAのentites:

私のモデルJSONは次のようになります。 私は両方のクラスのインタフェースに実装してみました:

public interface TvShowEntity { 

    Integer getId(); 

    String getName(); 

    List getSeasons(); 

    List getEpisodes(); 
} 

私はSeasonRemote、SeasonLocal、EpisodeRemote、EpisodeLocalに実装2種類のインタフェースSeasonEntity、EpisodeEntityもあります。上記の例のように見えます。

TvShowLocalにTvShowRemoteを割り当てようとしました。

TvShowEntity tvshowEntity = new TvShowRemote(); 
TvShowLocal tvShowLocal = (TvShowLocal) tvShowEntity; 

しかし、私はこのようにこのオブジェクトをキャストできません。 これを達成するより良い方法はありますか?

+0

プロパティ名を変更していない場合、@ JsonPropertyは冗長です。 – chrylis

答えて

0
TvShowEntity tvshowEntity = new TvShowRemote(); 
TvShowLocal tvShowLocal = (TvShowLocal) tvShowEntity; 

あなたは行うことはできません不可能キャストを達成しようとしています。

TvShowRemoteTvShowEntity

TvShowLocalであることがTvShowRemoteTvShowLocalとその逆であることを意味するものではありませんTvShowEntity

です。

アダプタデザインパターンを使用できます。

+0

ありがとうございました。私はキャストができないことを知っています。だからこそ私はもっと良い(適切な)方法でこれを達成することができると頼んだのです。 TvShowRocal - > TvShowLocalを簡単に割り当てることができるモデルクラスを作成するにはどうしたらいいですか? – Hype

+0

アダプタデザインパターンを使用するか、コードを手動でキャストしてください –

+0

ありがとうございました!私はアダプターを使用します。 – Hype

0

TvShowEntityとTvShowLocalの両方がTvShowEntityを拡張しています。 しかし、TvShowLocalにTvShowRemoteとしてインスタンス化されたTvShowEntityをTvShowLocalにキャストすることはできません。 Wideskillsから

キャストは、独自のクラス型、またはそのサブクラスまたはスーパータイプまたはインターフェイスのいずれかにすることができます。

プロパティを手動でTvShowRemoteからTvShowLocalにコピーするか、必要なメソッドインターフェイスをすべて宣言する場合は、スーパータイプTvShowEntityを使用する必要があります。

関連する問題