2014-11-18 2 views
3

방금 ​​Java Persistence API를 시작했고 사용하기에 편합니다. 그러나, 나는 약간의 디자인 결정에 부딪쳤다.JPA OneToOneToOne 매핑

여러 자동차, 여러 고객 및 다른 고객이 서로 다른 자동차를 사용할 수있는 렌터카 가게를 운영한다고 가정 해 보겠습니다. 고객의 좋아하는 자동차를 저장하려면 고객 클래스의 @OneToMany 관계를 사용하고 고객은 현재 자동차 클래스의 @OneToOne을 임대합니다.

이제 고객이 주어진 자동차로 주행 한 킬로미터 수를 어떻게 저장해야합니까? 예를 들어 MySQL 데이터베이스를 사용하면 customer_id, car_id 및 킬로미터라는 세 개의 열 (ID가있는 네 개의 열)이있는 테이블을 만들 수 있습니다. customer_id와 car_id는 FKs이고 킬로미터는 자명하다.

JPA에서 가장 좋은 방법은 무엇입니까? 예를 들어 고객의 클래스에서 @OneToMany 객체 (예 : 쌍 목록)를 저장할 수 있습니다. 첫 번째는 자동차, 두 번째는 고객이 차로 몰아 넣은 킬로미터 수입니다. 그러나 그것은 옳다고 생각하지 않습니다. 어떠한 제안?

답변

6

당신은 다음과 같은 RentalCarMileage라는 이름의 개체 수 있습니다 :

@Entity 
public class RentalCarMileage implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @ManyToOne 
    private Car car; 

    @ManyToOne 
    private Customer customer; 

    @Column 
    private BigDecimal mileage; 
} 

@Entity 
public class Customer implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @OneToMany(mappedBy = "customer") 
    private List<RentalCarMileage> rentals; 

} 

@Entity 
public class Car implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @OneToMany(mappedBy = "car") 
    private List<RentalCarMileage> rentals; 

} 

이 매핑은 당신이 양방향 연관을 갖고 싶어하지만 @OneToMany 필수 아닌 가정합니다. 검색어를 실행하여 자동차 또는 고객의 임대를 얻을 수 있습니다.

+0

Customer 클래스 또는 역에서
@ManyToMany @JoinTable(name="INTERMEDIATE_TABLE_NAME", joinColumns = {@JoinColumn(name="customer_id_name")}, inverseJoinColumns = {@JoinColumn(name = "car_id_name")}) Set<Car> cars; 

가, 감사합니다! 그것은 내가 생각해내는 것보다 훨씬 낫다. –

+0

친절한 말 주셔서 감사합니다. –

1

나는 @ManyToMany 주석이 필요하다고 생각합니다. 예컨대 : Car 클래스

+0

실제 킬로미터가 어디에 저장되어 있는지 잘 모르겠습니다 ...? –

+0

제 잘못입니다. 킬로미터 정보를 추가해야한다는 사실을 잊어 버렸습니다. 대신 @ VladMihalcea 대답을 사용하십시오. – brlaranjeira

+0

아, 너무 나빴어. 나는 당신이 자리를 잡지 못했던 몇 가지 깔끔한 트릭을 사용하기를 바랐다. 그리고 모든 것이 두 개의 주석과 하나의 필드로 작동 할 것이라고 기대했다. –