Mysql
 sql >> Base de données >  >> RDS >> Mysql

Hibernate @OneToMany lance MySQLSyntaxErrorException :vous avez une erreur dans votre syntaxe SQL

Vous ne pouvez pas sélectionner une collection dans une projection DTO comme celle-ci :

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

Le ResultSet est comme une feuille de calcul, pas comme un graphique d'objets.

Ce que vous devez faire est de changer votre DTO comme ceci :

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

Désormais, vous ne pouvez passer qu'un seul téléphone à la fois :

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) )
) 

Ensuite, vous pouvez transformer le ResutSet de type table en un graphique à l'aide d'un Hibernate ResultTransformer .