Я работаю над приложением Spring Boot, использующим Hibernate 5. У меня есть пользовательский @Query
для хранилища.
public interface TeamResourceRepository extends CrudRepository<ResourceItem, Integer> {
@Query("Select i from ResourceItem as i JOIN i.resourceCategories as c WHERE c.ID = ?1")
List<ResourceItem> findByCategory(int id);
@Query("Select i from ResourceItem as i JOIN i.tags as t WHERE (t.description = ?1 "
+ " OR i.name LIKE ?1%) AND i.isActive ORDER BY i.name")
List<ResourceItem> findByTag(String search);
}
Однако я получаю следующую ошибку Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected AST node: . near line 1, column 138 [Select i from com.midamcorp.resource_server.model.ResourceItem as i JOIN i.tags as t WHERE (t.description = ?1 OR i.name LIKE ?1) AND i.isActive ORDER BY i.name]
Я смотрел на некоторые другие вопросы по этой теме, но ни один из них не отражал мою проблему.Кажется, что все это довольно стандартный SQL (JOIN, OR, LIKE и т. Д.), Поэтому я не уверен, в чем проблема.
Я использую MS SQL Server в качестве моего бэкэнда;Любой совет будет оценен.
РЕДАКТИРОВАТЬ
Код для ResourceItem
@Entity
@Table(schema = "Midamcorp", name = "ResourceItem")
public class ResourceItem {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int ID;
@ManyToMany(mappedBy = "resources")
private List<ResourceCategory> resourceCategories = new ArrayList<>();
@ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE })
@JoinTable(name = "TagsResources", schema = "Midamcorp",
joinColumns = @JoinColumn(name = "ResourceID", referencedColumnName = "ID"),
inverseJoinColumns = @JoinColumn(name = "TagID", referencedColumnName = "ID"))
private List<Tag> tags = new ArrayList<>();
@OneToOne
@JoinColumn(name = "FileID")
private FileResource file;
@Column(name = "Name")
private String name;
@Column(name = "IsActive")
private boolean isActive;
public ResourceItem() {
}
public ResourceItem(int iD, List<Tag> tags, FileResource file, String name) {
ID = iD;
this.tags = tags;
this.file = file;
this.name = name;
}
// getters and setters here }