0

JPAを使用して、データベースからいくつかのエンティティークラスを作成しました。

これらはクラスです:

  1. フライト
  2. 乗客
  3. PassengersFlights(乗客とフライトの主キーを含む)
  4. ユーザー

データベースでは、PassengersFlightsテーブルに2つの外部キーがあります。1つはFlights用で、もう1つはPassengers用です。

私が抱えている唯一の問題は、乗客とフライトの主キーが、PassengersFlightsエンティティクラスのデータ型PassengersとFlightsであるということです。ただし、それぞれのエンティティクラスでのこれらのデータ型は、データベースで定義されているように、Stringとintです。

PassengersFlightsテーブルを更新するための次のコードがあります。

// Updating the Passengers_Flights table
try
{
    Class.forName("com.mysql.jdbc.Driver");
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/flights_db", "root", "hello");

    EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("Flights_AssignmentPU");
    EntityManager em = emFactory.createEntityManager();

    PassengersFlights booking = new PassengersFlights();
    booking.setPassportNum(passport);
    booking.setFlightId(flight_id);
    em.getTransaction().begin();
    em.persist(booking);
    em.getTransaction().commit();
    em.close();
}
catch (Exception e)
{
    response.sendRedirect("ErrorPage.html");
}

私が抱えている問題は、パスポート番号とフライトIDを設定するときです。プロジェクトでは、それらはstringおよびintとして定義されています。ただし、PassengerとFlightsのデータ型が必要です。どうすればこの問題を解決できますか?

4

1 に答える 1

1

passportおよびflight_idがそれらの立派なエンティティの主キーである場合、指定さgetReference()れた主キーで必要なタイプのプロキシオブジェクトを取得するために使用できます。

booking.setPassportNum(em.getReference(Passenger.class, passport));
booking.setFlightId(em.getReference(Flight.class, flight_id));

また、追加のフィールドがない単なるリンクテーブルの場合は、リンクテーブルに個別のエンティティを使用せずに、をPassengers_Flights使用して乗客とフライトの関係をモデル化できることにも注意してください。@ManyToMany

于 2012-12-07T10:35:24.413 に答える