После прочтения ваших дополнительных комментариев (и, надеюсь, я не понял неправильно), что вы могли бы сделать в своем контроллере, так это найти все уникальные категории в столбце type
. Затем для каждого типа (как представлено переменной categories
в фрагменте кода ниже) вы можете выполнить этот вызов:
Map<String, List<Post>> map = new HashMap<String, List<Post>>();
// the categories variable here is the unique types from the Post table
for (String category : categories) {
List<Post> posts = Post.find("type = ?", category).fetch();
map.put(category, posts);
}
render(map);
И затем, по вашему мнению, вы можете просмотреть ключи карты, которые будут представлять все имена категорий, а затем вы получите значение, связанное с ключом, и переберите сообщения для этой категории.
Выше предполагается, что пользователь может вводить все, что он хочет. Если вы действительно хотите, чтобы они выбирали либо «Здоровье», «Политика» и «Развлечения» в соответствии с вашим примером просмотра в исходном сообщении, то, возможно, вам нужно смоделировать категории в базе данных. Некоторые варианты могут быть:
Первый вариант
Вы можете иметь две сущности: (1) Почта и (2) Категория. Первый у вас есть. Второе вам нужно будет создать. Поэтому создайте объект категории следующим образом:
@Entity
public class Category extends Model {
@OneToMany(mappedBy = "category", targetEntity = Post.class)
public List<Post> posts;
...
}
Тогда в вашей сущности Post вы можете установить связь между сущностями Post и Category следующим образом:
@Entity
public class Post extends Model {
@ManyToOne
@JoinColumn(name = "category_id")
public Category category;
...
}
Это было бы хорошо, если бы пользователь (или вы) могли создавать категории динамически (или непосредственно в базе данных), чтобы позволить пользователям выбирать предварительно определенные категории.
Второй вариант
Если приведенный выше пример излишний, потому что категория - это просто слово и не имеет других свойств, таких как description, тогда вы можете просто использовать enum для категории:
public class Post extends Model {
@Enumerated(EnumType.STRING)
public Category category;
...
}
Где Category - это перечисление, подобное этому:
public enum Category {
HEALTH,
ENTERTAINMENT,
POLITICS
}
Опять же, эта опция означает, что пользователь будет выбирать из предварительно определенного списка.