2012-12-07 2 views
0

JPA를 사용하여 데이터베이스에서 여러 엔티티 클래스를 만들었습니다. Java - 지속성 및 엔티티 클래스

은 클래스입니다 :
  • PassengersFlights
  • 사용자 데이터베이스에서

  • (승객과 항공편의 기본 키를 포함)
  • 승객

    1. 항공편, 두 가지가 있습니다 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"); 
      } 
      

      여권 번호와 비행 ID를 설정할 때 나는 데 문제가 있습니다. 프로젝트에서 문자열과 int로 정의됩니다. 그러나 승객 및 항공편 데이터 유형이 필요합니다. 이 문제를 어떻게 해결할 수 있습니까?

  • +0

    Passengers는 승객과 비행이라는 두 개의 열이있는 표를 표시하므로 승객 용으로 추가 클래스를 설계하면 안됩니다. 항공편과 승객 간의 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