#java #spring-data-jpa
#java #spring-data-jpa
Вопрос:
Сейчас с аннотацией @Query происходит что-то странное, я пытаюсь извлечь некоторые конкретные поля из таблицы, используя список пользователей в качестве входных данных:
@Query(value = "select new document(documentId, documentType, status, rejected) " "from document where user in ?1")
List<Document> findByUserInWithoutFiles(List<User> users);
Приведенный выше код работает как ожидалось, но теперь мне нужен пользователь, которому принадлежит этот документ, поэтому я добавил его в конструктор:
@Query(value = "select new document(documentId, documentType, status, rejected, user) " "from document where user in ?1")
List<Document> findByUserInWithoutFiles(List<User> users);
Но здесь выдает
java.sql.SQLSyntaxErrorException: неизвестный столбец «пользователь» в предложении where
Вот объект Document.
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity(name = "document")
@Table(name = "document", schema = "foo")
public class Document implements Serializable {
private static final long serialVersionUID = -9793924073464282L;
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Column(columnDefinition = "BINARY(16)", name = "document_id")
@Id
private UUID documentId;
@Column(name = "document_type")
private PhotoEnum documentType;
@Column(name = "created_date")
private LocalDateTime createdDate;
@Column(name = "update_date")
private LocalDateTime updateDate;
@Lob
@Column(name = "file", columnDefinition = "BLOB")
private byte[] file;
@Column(name = "status")
private String status;
@Column(name = "rejected")
private String rejected;
@Column(name = "expiration_date")
private LocalDate expirationDate;
@ManyToOne(targetEntity = User.class, fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private User user;
public Document(PhotoEnum documentType) {
this.documentType = documentType;
}
public Document(UUID documentId, PhotoEnum documentType, String status, String rejected,
User user) {
this.documentId = documentId;
this.documentType = documentType;
this.status = status;
this.rejected = rejected;
this.user = user;
}
Итак, вопрос в том, что я делаю не так? это ошибка?
Есть ли другой способ получить частичную информацию из этого объекта? (Мне не нужно поле file)
Я был бы признателен за любой совет.
Приветствия!
РЕДАКТИРОВАТЬ: я провел некоторые альтернативные исследования, и в итоге я использовал проекции на основе интерфейса вместо аннотации @Query — лучшее и элегантное решение.
Ответ №1:
Я провел некоторые альтернативные исследования, и в итоге я использовал проекции на основе интерфейса вместо аннотации @Query — лучшее и элегантное решение.