Mysql
 sql >> Database >  >> RDS >> Mysql

Hibernate @OneToMany lancia MySQLSyntaxErrorException:hai un errore nella sintassi SQL

Non è possibile selezionare una raccolta in una proiezione DTO come questa:

SELECT new com.tim.core.dto.client.MinimalContactDTO(c.id, c.version, c.name, c.title, c.email, c.createdDate, **c.phones**)

Il ResultSet è come un foglio di calcolo, non come un grafico di oggetti.

Quello che devi fare è cambiare il tuo DTO in questo modo:

public MinimalContactDTO(
    Long id, Long version, String name, String title, String email, 
    Date createdDate, ContactPhone phone) {
    ...
}

Ora puoi passare solo un telefono alla volta:

SELECT new com.tim.core.dto.client.MinimalContactDTO(
    c.id, c.version, c.name, c.title, c.email, c.createdDate, p)
from CONTACT c 
JOIN c.phones p
where 
( 
    c.localRecordStatus IS NULL OR 
    c.localRecordStatus IN (:openStatusList) )
) 

Quindi, puoi trasformare il ResutSet simile a una tabella in un grafico usando un Hibernate ResultTransformer .