Имеется класс для хранения тегов к определенной статье:
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@ToString
public class Tags {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(nullable = false, length = 255)
private String tag;
}
И собственно сам контент-класс, которые реализует set интерфейс:
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@ToString
public class ContentDB {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(nullable = false, length = 255)
private String title;
@Lob
@Column(nullable = false)
private String description;
@Lob
@Column(nullable = false)
private String content;
private boolean publicContent;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
@JoinColumn(name = "content_id", nullable = false)
private Set<Tags> tagsSet;
@Column(nullable = false, length = 255)
private String user;
@Column(nullable = false)
private Date date;
}
Реализую crud интерфейс:
@Repository
public interface ContentRepository extends CrudRepository<ContentDB, Integer> {
public Optional<ContentDB> findContentDBById(final int id);
// Этот метод не работает.
public Optional<List<ContentDB>> findContentDBByTagsSet(final String tag);
// Тоже не работает.
@Query("select c from ContentDB c where c.tagsSet = :tag")
public Optional<List<ContentDB>> findAllByTag (final String tag);
}
@SpringBootTest
public class ContentDBTest {
private int id = 1;
@Autowired
private ContentService contentService;
// Работает великолепно!
@Test
public void findContentById() {
ContentDB contentDB = contentService.findContentById(id);
Assertions.assertNotNull(contentDB, "The content class is null!");
}
// Работает великолепно!
@Test
public void extractTagsSetFromContent() {
ContentDB contentDB = contentService.findContentById(id);
Set<Tags> tagsSet = contentDB.getTagsSet();
Assertions.assertNotNull(tagsSet, "TagsSet is null!");
Assertions.assertNotEquals(0, tagsSet.size(), "The size of set<Tags> is 0!");
}
//Не работает!
@Test
public void findContentByTag (){
String tag = "outlook";
List<ContentDB> contentDBS = contentService.findAllByTag(tag);
Assertions.assertNotNull(contentDBS, "Content list is null!");
}
}
Собственно как найти весь контент по определенному тегу?