2011-09-12 5 views
0

나는 약간의 웹 유틸리티를 생성하면서 레거시 데이터베이스를 매핑하면서 Hibernate/Spring을 처음 사용하기 때문에 동료들에게 도움이 될 것입니다. 엔티티를 매핑하고 기본 데이터에 액세스 할 수 있었기 때문에 몇 가지 문제가있었습니다. 간단히 요약하면, 나는 두 entites, 고객Hibernate : @OneToMany/@ManyToOne 매핑 문제 (엔티티 기본 키를 사용하지 않음)

@Entity 
public class Customer implements Serializable{ 

    @Id 
    @Column(name = "RecordID") 
    private Integer id; 

    @Column(name = "CUSTOMERNAME1") 
    private String name; 

    @OneToMany 
    @JoinColumn(name="CUSTOMER1", referencedColumnName="CUSTOMERNAME1") 
    private List<Contract> contracts; 
} 

와 계약을 체결 한 :

@Entity 
public class Contract implements Serializable { 

    @Id 
    @Column(name = "RECORDID") //RecordID 
    private Integer id; 

    @Column(name = "CONTRACTID1") //ContractID1 
    private String contractId; 

    @Column(name = "CUSTOMER1") //Customer1 
    private String customerName; 

    //@ManyToOne 
    //private Customer customer; // how can I write the reverse mapping? 
} 

계약에 대한 고객의 매핑 작동 (한 고객은 내가 모두 사용하여 그들을 얻을 수 있습니다, 많은 계약을 할 수 있습니다 고객의 계약 필드 목록을 표시하지만 제 질문은 어떻게 취소 할 수 있습니까? 즉, 계약 대상 고객을 매핑 할 수 있습니까?

+1

당신이 정의하는 "많은"쪽은 항상 관계의 소유자이다, 그래서 가입 그 쪽 테이블. 이 예제에서는 실제로 조인 테이블이 필요하지 않습니다. 여러 측면의 필드는 소유자의 참조를 저장할 수 있습니다. – toto2

답변

2

Java API에 ManyToOne 주석을 사용하는 몇 가지 예가 있습니다. http://java.sun.com/javaee/6/docs/api/javax/persistence/ManyToOne.html 아래 같은

뭔가 :

고객 클래스 :

@OneToMany(mappedBy="customer", cascade=CascadeType.ALL) 
private List<Contract> contracts; 

계약 클래스 :

@ManyToOne 
@JoinColumn(name="customer_id", nullable=false) 
private Customer customer; 
관련 문제