2012-12-07 91 views
0

我使用JPA從數據庫創建了一些實體類。Java - 持久性和實體類

這些是類:

  1. 航班
  2. 乘客
  3. PassengersFlights(含有乘客和航班的主鍵)
  4. 用戶

在數據庫中,有兩個PassengersFlights表中的外鍵 - 一個用於航班,一個用於乘客。

我唯一的問題是乘客和航班的主鍵是PassengersFlights實體類中的數據類型乘客和航班。但是,它們各自實體類中的數據類型是數據庫中定義的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"); 
} 

我遇到的問題是設置護照號碼,航班號時。在項目中,它們被定義爲字符串和整型。但是,它期望Passenger和Flights數據類型。我該如何解決這個問題?

+0

乘客是否有兩列(乘客和航班)飛行表,您不應該爲PassengersFlights設計額外的班級。在航班和乘客之間使用n-m關係。 –

回答

1

如果passportflight_id是他們尊敬的實體的主鍵,你可以用getReference()來獲得所需類型的代理對象與給定的主鍵:

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

還要注意的是,如果Passengers_Flights只是一個鏈接沒有額外字段的表格,您可以使用@ManyToMany來模擬乘客和航班之間的關係,而鏈接表沒有單獨的實體。

+0

非常感謝你:) – Matthew