Извините за слишком простой вопрос, у меня нет опыта работы с Hibernate и попытка сопоставить эти классы и не найти пример, который сопоставляет объект другому объекту, представляющему список.Hibernate - Как сопоставить объект, представляющий коллекцию
атрибутов ключевых слов используются, чтобы быть списком строки, как:
List<String> keywords;
но я инкапсулировать его на классе, чтобы добавить более специализированное поведение, следуя книгу «Чистый код» от Боба С. Мартина. Но я понятия не имею, как сопоставить его, как если бы у него было такое же поведение, когда список был в собственном классе.
@Entity
@Table(name = "produtos")
public class Product {
@Id
@GeneratedValue
@Column(name = "id")
private int id;
@Embedded
private BarCode barCode;
@ManyToOne
private Manufacturer manufacturer;
private String description;
//How to map?
private Keywords keywords;
}
public class Keywords {
private List<String> wordList = new ArrayList<>();
public void add(String keyword) {
wordList.add(keyword);
}
public boolean contains(String keyword) {
return wordList.contains(keyword);
}
public static Keywords ofPhrase(String phrase) {
Keywords keywords = new Keywords();
StringTokenizer tokenizer = new StringTokenizer(phrase, " ", false);
while (tokenizer.hasMoreTokens()) {
String t = tokenizer.nextToken();
if (t.length() > 4 && !keywords.contains(t)) {
keywords.add(t);
}
}
return keywords;
}
public List<String> getWordList() {
return wordList;
}
}
Я сделал несколько рефакторингов. Как вы предлагаете, я создаю класс KeywordTokenizer и отделяю задание токенизатора от класса Keywords: https://gist.github.com/alexpfx/f99c841ec19b7a9d4653 https://gist.github.com/alexpfx/c8235cb95af3ee34526c Я не знаю, является ли это именно то, что вы имеете в виду? – alexpfx
Да. Теперь, когда у вас есть этот класс, вы можете сохранить класс продукта простым и вообще не использовать класс Keywords. – orange77