2016-08-14 6 views
0

두 개의 테이블 (도시, 국가)과 두 개의 테이블이있는 데이터베이스가 있습니다.하나 이상의 관계가있는 테이블에 대한 최대 절전 모드

첫 번째 것은 "국가마다 여러 도시가 있습니다."관계입니다.

select * from City inner join Country on(code=countrycode); 

두 번째 것은 "국가에 자본이 하나"관계입니다. 최대 절전 기준은 제 1 관계, 예를 들면,

Criteria criteria = session.createCriteria(City.class); 
List<City> = criteria 
       .createCriteria("countrycode") 
       .add(Restrictions.eq("continent", continent)) 
       .list(); 

그러나 어떻게 대문자 목록을 검색하기위한 최대 절전 모드 기준을 만들 수 있습니까? 두 번째 관계는 매핑되지 않습니다. Hibernate는 이런 종류의 관계를 지원합니까?

시 클래스 :

@Entity 
public class City { 

    @Id 
    @Column(name = "ID", updatable = false, nullable = false) 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Integer id; 

    ... 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "countrycode", nullable = false) 
    private Country countrycode; 

    ... 

국가 클래스 : 도시 국가의 자본은 도시 내에서해야합니다 여부를

@Entity 
public class Country { 

    @Id 
    private String code; 

    @OneToMany(targetEntity = City.class, mappedBy = "countrycode") 
    private Set<City> cities; 

    private Integer capital; 

    ... 
+0

특정 도시의 수도가 아닌지 여부를 도시 엔티티에 나타내면 안됩니까? – Journeycorner

+0

mysql.com에서 샘플 데이터베이스'world'를 사용하고 있습니다. 도시 테이블의 불필요한 필드는 불필요한 IMHO입니다. Hibernate 쿼리 언어의 theta join을 통해 이미 대문자 목록을 검색 할 수 있습니다. – Steve

답변

0

정보입니다. City에 다음과 같은 부울 필드를 추가합니다.

List<City> = session.createCriteria(City.class) 
       .createCriteria("countrycode") 
       .add(Restrictions.eq("continent", continent)) 
       .add(Restrictions.eq("capital", true)) 
       .list(); 
+1

Journeycorner, 답변 해 주셔서 감사합니다. 한편, 매핑되지 않은 관계와 함께 Hibernate의 criteria API를 사용할 수없는 정보를 발견했습니다. 그러나 나는 당신의 대답을 받아들입니다. – Steve