Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Hibernate @OneToMany löst MySQLSyntaxErrorException aus:Sie haben einen Fehler in Ihrer SQL-Syntax

Sie können keine Sammlung in einer DTO-Projektion wie dieser auswählen:

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

Das ResultSet ist wie eine Tabellenkalkulation, nicht wie ein Diagramm von Objekten.

Was Sie tun müssen, ist Ihr DTO wie folgt zu ändern:

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

Jetzt können Sie jeweils nur ein Telefon weitergeben:

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

Anschließend können Sie das tabellenartige ResutSet mithilfe eines Hibernate ResultTransformer .