2017-02-22 11 views
0

는 사실 내가 Entity 클래스를 사용하여 GET 결과를 사용하여 쿼리를 가입 HQL에 쿼리를하는 SQL JOIN변환은</strong> 그러나 <strong>(meetingschedule 제외) 내 <code>Entity</code> 클래스에서 생성되지 않은 테이블을 다음 (<strong>이</strong>을 조인 쿼리에 대해 나는 잘 모른다)

mysql> desc meetingschedule; 
+--------------+------------------+------+-----+---------+----------------+ 
| Field  | Type    | Null | Key | Default | Extra   | 
+--------------+------------------+------+-----+---------+----------------+ 
| meeting_id | int(11)   | NO | PRI | NULL | auto_increment | 
| meeting_date | date    | YES |  | NULL |    | 
| status  | tinyint(1)  | YES |  | NULL |    | 
| client_id | int(10) unsigned | YES | MUL | NULL |    | 
| remark_id | int(10) unsigned | YES | MUL | NULL |    | 
+--------------+------------------+------+-----+---------+----------------+ 
13 rows in set (0.03 sec)             

mysql> desc client; 
+-----------+------------------+------+-----+---------+----------------+ 
| Field  | Type    | Null | Key | Default | Extra   | 
+-----------+------------------+------+-----+---------+----------------+ 
| client_id | int(10) unsigned | NO | PRI | NULL | auto_increment | 
| firm_name | varchar(90)  | NO |  | NULL |    | 
| is_active | char(1)   | YES |  | NULL |    | 
| parent_id | int(10) unsigned | YES |  | NULL |    | 
+-----------+------------------+------+-----+---------+----------------+ 
11 rows in set (0.01 sec) 

mysql> desc client_city; 
+-----------+------------------+------+-----+---------+-------+ 
| Field  | Type    | Null | Key | Default | Extra | 
+-----------+------------------+------+-----+---------+-------+ 
| client_id | int(10) unsigned | NO | MUL | NULL |  | 
| city_id | int(10) unsigned | NO |  | NULL |  | 
+-----------+------------------+------+-----+---------+-------+ 
2 rows in set (0.00 sec) 

mysql> desc client_domain; 
+-----------+------------------+------+-----+---------+-------+ 
| Field  | Type    | Null | Key | Default | Extra | 
+-----------+------------------+------+-----+---------+-------+ 
| client_id | int(10) unsigned | NO |  | NULL |  | 
| domain_id | int(10) unsigned | NO |  | NULL |  | 
+-----------+------------------+------+-----+---------+-------+ 
2 rows in set (0.00 sec) 

가 어떻게 SQL은 HQL에 가입 변환합니까 다음과 같이, 지금은 테이블을 조인 할, 나는 결과를 가져 오는 동안 붙어있어 내 테이블은?
내 SQL 쿼리는 다음과 같습니다

mysql> select a.* from meetingschedule a join client b on 
     a.client_id = b.client_id join client_city c on 
     b.client_id = c.client_id join client_domain d on 
     b.client_id = d.client_id where c.city_id=28 and d.domain_id=4; 

UPDATE :
엔티티 클래스는
1 MeetingSchedule.java

@Entity 
@Table(name="meetingschedule") 
public class MeetingSchedule implements Serializable { 

    private static final long serialVersionUID = 1L; 

    public MeetingSchedule() { 
    } 

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    @Column(name="meeting_id") 
    private Integer meetingId; 

    @ManyToOne 
    @JoinColumn(
     name="client_id", columnDefinition="INT(10) UNSIGNED", 
     [email protected](name="fk_meetingschedule_client") 
    ) 
    private Client client; 

    @Column(name="status", columnDefinition="TINYINT(1)") 
    private short status; 

    @Column(name="meeting_date") 
    @Temporal(TemporalType.DATE) 
// @DateTimeFormat(pattern="yyyy-MM-dd") 
    private Date meetingDate; 

    @ManyToMany(fetch=FetchType.EAGER) 
    @JoinTable(name="meeting_employee", 
     joinColumns={@JoinColumn(name="meeting_id")}, 
     inverseJoinColumns={@JoinColumn(name="emp_id",columnDefinition="INT(10) UNSIGNED")}, 
     [email protected](name="fk_meeting_employee_meetingschedule_meeting_id"), 
     [email protected](name="fk_meeting_employee_employee_emp_id") 
    ) 
    private Set<Employee> employees = new HashSet<>(); 

    @ManyToMany(fetch=FetchType.EAGER) 
    @JoinTable(name="meeting_part", 
     joinColumns={@JoinColumn(name="meeting_id")}, 
     inverseJoinColumns={@JoinColumn(name="part_id",columnDefinition="INT(10) UNSIGNED")}, 
     [email protected](name="fk_meeting_part_meetingschedule_meeting_id"), 
     [email protected](name="fk_meeting_part_part_mst_part_id") 
    ) 
    private Set<Part> parts = new HashSet<>(); 
} 

2 Client.java

@Entity 
@Table(name="client") 
public class Client implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    @Column(name="client_id") 
    private String client_id; 

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

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

    @JsonBackReference 
    @OneToOne(cascade=CascadeType.ALL) 
    @PrimaryKeyJoinColumn 
    private ClientCity clientCity; 

    @JsonBackReference 
    @OneToOne(cascade=CascadeType.ALL) 
    @PrimaryKeyJoinColumn 
    private ClientState clientState; 
} 

3. ClientCity

@Entity 
@Table(name="client_city") 
public class ClientCity implements Serializable{ 

    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(generator="fk_client_id") 
    @GenericGenerator(strategy="foreign", name="fk_client_id", [email protected](name="property", value="clientJoin")) 
    @Column(name="client_id") 
    private String client_id; 

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

    @OneToOne(mappedBy="clientCity") 
    private Client clientJoin; 

} 

4. ClientDomain

@Entity 
@Table(name="client_domain") 
@NamedQuery(name="ClientDomain.findAll", query="SELECT c FROM ClientDomain c") 
public class ClientDomain implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Column(name="client_id") 
    private int clientId; 

    @Column(name="domain_id") 
    private int domainId; 

    public ClientDomain() { 
    } 
} 
+1

5 개의 테이블에 대해 5 개의 POJO 클래스를 생성 했습니까? 관련 쿼리를 게시 할 수 있도록 게시물을 게시하십시오. – Akshay

+0

예 (4 테이블), 알겠습니다, 기다리십시오, –

+0

@Akshay 엔티티 클래스의 코드 스 니펫을 추가했습니다. –

답변

0

나는 클라이언트 클래스 사이의 참조를 볼 수 없기 때문에이 작동하고 있는지 내가 슈어 아니에요 및 ClientDomain 클래스 그리고 SyntaxError가 발생하기 때문에 조인 내에서 NamedQuery를 사용할 수 없다고 생각합니다.

일반적으로 귀하의 HQL 질의는 다음과 같이 보일 것이다 : 당신을 통해 DB에서 데이터를 얻을 수있는 것보다

List<MyQueryResult> result = new List<MyQueryResult>(); 

:

Query query = session.createQuery(
select a 
from MeetingSchedule a 
left join a.client b 
left join b.clientCity c 
left join b.clientDomain d 
where c.city_id = :city_id 
and d.domain_id = :domain_id) 
.setInteger("city_id", 28) 
.setInteger("domain_id", 4) 

는이 같은 결과 개체를 필요로하여 DB에서를 조회하려면 :

result = query.list(); 
+0

ty, 이것을 시도하고 알려 드리겠습니다. –

+0

'사이의 참조를 볼 수 없습니다. Client 클래스와 ClientDomain 클래스가 있습니다. "-> 관계가 없습니다. 그래서 예외가 생겼습니다. ** 클라이언트의 clientDomain ** –

+0

노력을 기울이기 위해 이제 원시 SQL 쿼리를 사용했습니다. –