2017-07-19 11 views
0

私は、プレーヤのハンガーのポジションのレンタルを追跡するアプリケーションを設計しています。ハンガーとポジションを借りる契約

クラス契約(から日付、場所、日時、顧客)

クラスの位置(整数sideOne、整数sideTwo):異なるプレーン異なる寸法を必要とするので、私は、次のエンティティを作成しました。例:(3メートル×4メートル)または(4メートル×4メートル)。タイプごとに1つのポジションを作成し、ハンガーごとに複数のインスタンスを割り当てます。

場所:(文字列の説明)この種の構造は、サイズに応じて複数の位置を持つことができます。例:3(3メートル×4メートル)と2(3メートル×3メートル)。

クラスPositionInHangar extends Location:(Position position、Hangar hangar):これは、「PositionInHangar」を1つ、2つ、またはすべてのハンガーでレンタルする必要があるためです。

私はまた、2つのリポジトリを構築しました:

HangarRepositoryがJPARepository PositionInHangarRepository今すぐJpaRepository

を拡張拡張し、私は次の方法を構築するために必要だ:IDによる

ハンガー/秒 - >これは問題ありません。

Idによる位置は問題ありません。

職業別の所在地:私はすべての職位をアドレス可能な単位として扱う必要があります。

public interface PositionInHangarRepository extends JpaRepository<PositionInHangar, Integer> { 

List<PositionInHangar> findByHangarId(Hangar hangar); 
} 

しかし、それは動作しません: は、私は次のように実行しようとしました。

提案がありますか?

ありがとうございます!

public abstract class Location implements Serializable { 
    @Id 
    private Integer id; 
} 

public class Hangar extends Location implements Serializable { 
    private String description;  
} 

public class Position implements Serializable { 
    @Id 
    private Integer id; 

    private String description; 

    private Integer sideOne; 

    private Integer sideTwo; 
} 

public class PositionInHangar extends Location implements Serializable { 

    @OneToOne 
    private Hangar hangar; 

    @OneToOne 
    private Position position; 
} 

@Repository 
public interface HangarRepository extends JpaRepository<Hangar, Integer> { 

} 

@Repository 
public interface PositionInHangarRepository extends JpaRepository<PositionInHangar, Integer> { 
    List<Position> findByHangarId(Hangar hangar); 
} 
+2

* *何か提案はありますか?*動作していないコードを提供して、なぜ動作しないのかを教えてください –

答えて

0

私はクラスネーミングに関しては誤解を招くことがあると思います。あなたの説明から、Positionには寸法(XとY)だけが含まれていると解釈され、ハンガーの飛行機の実際の位置はクラスPositionInHangarによって決定されます。

例として、HangarAは、それぞれがPosition(例えば、2x3,3x3など)を有するA1、A2およびA3を有する。あなたの設計では、次元を再利用する(または固定された集合を持つ)ことを試みています。その場合は

、私はDimensionからPositionの名前を変更することをお勧めしたいとPositionからPositionInHanger(旧AWTライブラリを使用している場合java.awt.Dimensionを見ても、価値があるかもしれないことは不便ではありません)。

あなたはこのようなもので終わる必要があります:あなたが格納庫で、すべての位置をリストしたい場合、あなたはちょうどあなたがしたい/ sの格納庫を見つけ、getPositions()を行う必要があると思います、そして、

public class Hangar { 
    String name; // e.g. A 
    Set<Position> positions; 
} 

public class Position { 
    String name; //e.g. A1 
    Hangar hangar; 
    Dimension dimension; 
} 

。あるいは、別の方法でSet<Position> findByHangar(Hangar hangar)PositionRepositoryに作成することもできます(おそらくHibernateのLazyInitializationExceptionを避けるため)。

ContractクラスにList<Position>オブジェクトを含めると、「レンタルされている」ポジション(双方向関係である場合もあれば、そうでない場合もある)を知ることができます。

+0

優れたアプローチ!今私はモデルを再実装するつもりです。 – Esteban

+0

私はモデルを実装しており、必要なものを表しています。ありがとう! – Esteban

関連する問題