2012-12-07 58 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