Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Hibernate @OneToMany lança MySQLSyntaxErrorException:Você tem um erro na sua sintaxe SQL


Você não pode selecionar uma coleção em uma projeção DTO como esta:
SELECT new com.tim.core.dto.client.MinimalContactDTO(c.id, c.version, c.name, c.title, c.email, c.createdDate, **c.phones**)

O ResultSet é como uma planilha, não como um gráfico de objetos.

O que você precisa fazer é alterar seu DTO assim:
public MinimalContactDTO(
    Long id, Long version, String name, String title, String email, 
    Date createdDate, ContactPhone phone) {
    ...
}

Agora, você só pode passar um telefone por vez:
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) )
) 

Em seguida, você pode transformar o ResutSet semelhante a uma tabela em um gráfico usando um Hibernate ResultTransformer .