Весенние прогнозы выберите коллекцию - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь, чтобы проекция станции включала список связанных логотипов.Ниже мой домен:

@Table(name = "Station")
public class Station implements Serializable {

@Id
@Column(name = "Id")
private int id;

@OneToMany(cascade = CascadeType.ALL,
        fetch = FetchType.LAZY,
        mappedBy = "station")
private Set<Logo> logos;
}

Логотипы, связанные с @OneToMany:

@Table(name = "Logo")
public class Logo {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;

@Transient
private String fullUrl; // calculated

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "StationId", nullable = false)
private Station station;
}

Мой репозиторий и запрос выглядят следующим образом:

@Query(value = "SELECT s.id AS Id, s.logos As Logos FROM Station s JOIN s.users su WHERE su.username = ?1")
Collection<StationListViewProjection> findStationsByUsername(String username);

Ожидается проекция моей станцииидентификатор и список logoProjection

@Projection(name = "StationListViewProjection", types = Station.class)
public interface StationListViewProjection {
   int getId();
   Set<LogoProjection> getLogos();
}

Для logoProjection требуется только URL

@Projection(name = "LogoProjection", types = Logo.class)
public interface LogoProjection {
   String getFullUrl();
}

Когда я выполняю свой запрос, я получаю странный ответ:

MySQLSyntaxErrorException:У вас есть ошибка в вашем синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с 'col_5_0_,.как col_6_0_, stationlog3_.id как id1_20_0 _ '

1 Ответ

0 голосов
/ 07 июня 2018

Если я правильно понимаю

@Transient
private String fullUrl; // calculated

, ваш fullUrl вычисляется внутри вашего Java-кода и, что более важно, у него нет соответствующего столбца в базе данных.Вы не можете использовать это поле в проекциях напрямую.Возможно, вы сможете использовать Open Projection и указать расчет для получения fullUrl с помощью аннотации @Value.

...