Еще вопрос, а вообще как закрепить знания на все эти темы по коллекциям, может быть есть некоторые источники?
Получается, в каждой записи мне нужно хранить id создателя.
List<User> users = userRepository.findAll();
Converter<FROM, TO>
самого спринга Но ведь не будет ошибкой такой вариант:
Могли бы привести пример кода? Спасибо.
@Component
@Primary
public class GeneralManager implements Manager {
@Autowired
@Qualifier("fooFormatter")
private Formatter formatter;
private String category;
@ManyToMany(mappedBy = "category")
@ManyToMany(mappedBy = "categoryList")
private List<Category> categoryList;
private String description;
@Column(length=1000)
Иначе по дефолту кол-во символов равно 255 и в случае, если описание больше, чем 255 символов, то получите исключение при попытке сохранить запись.public Category get(Long id) {
if (repository.findById(id).isPresent()){
return repository.findById(id).get();
}
log.error("Категория не найдено");
return null;
}
Optional<Category>
private int price;
@ManyToMany(mappedBy = "categoryList")
private List<Product> productList;
@ManyToMany(fetch = FetchType.LAZY, cascade = {
CascadeType.PERSIST,
CascadeType.MERGE
})
@JoinTable(name = "product_categories",
joinColumns = @JoinColumn(name = "product_id"),
inverseJoinColumns = @JoinColumn(name = "category_id"))
private List<Category> categoryList;
<td th:text="${product.category}">Категория</td>
private String category;
вместо списка категорий. См. пункт 2 (это поле вообще не нужно). Вам нужно просто получить список категорий назначенных для данного товара, а затем при помощи th:each
вывести названия этих категорий.<td>
<span th:each="cat : ${product.categoryList}">
<span th:text="${cat.name}">Категория</span>
</span>
</td>
name=11&description=22&category=&price=300
<input type="text" th:field="*{category}"/>
Зачем вам это поле, если есть select?public List<Category> search(String keyword);
@Query("SELECT p FROM Product p WHERE CONCAT(p.name, ' ', p.description, ' ', p.price) LIKE %?1%")
List<Product> search(String keyword);
@RequestMapping
можно использовать более специализированные. Например, GetMapping PostMapping PutMapping и т.д.th:value="${product.category}"
<!-- Проблема! значение из option не происвается в product-->
<select th:field="*{categoryList}" class="form-select form-select-sm" aria-label="form-select-sm example" required>
<option selected value="">Выберите категорию</option>
<option th:each="category : ${categories}" th:value="${category.id}" th:text="${category.name}" value=""></option>
</select>
$(".wpcf7").on('wpcf7:mailsent', function(event){
alert();
//alert();
List<Category> category = categoryService.getAll();
и т.д. ctrl + z
и вернуть все обратно.я добавил код который вы скинули и после поломки удалил скрипт который вы скинули
alert();
и удалить или же закомментировать ее (добавить 2 слеша // ) в начале этой строки.function(event) {
alert();
$(".wpcf7").on('wpcf7:mailsent', function(event) {
......
alert();
И в этом js файле я нашел строчку с alert,влияет ли она на что то?
что мне делать с этим кодом? мне его удалить?
alert();
в файле common.js (2-я строка).
Если ответить на ваш вопрос простыми словами, то в контроллер инжектите интерфейс (и создаете сервис, который имплементирует этот сервис). А в сервис уже инжектятся другие интерфейсы и сервисы, а также репозитории и конвертеры и прочее.
Можно инжектить другие сервисы тоже. Вот, представьте что из одного сервиса вы пытаетесь вызвать метод для добавления другой сущности. Вы можете просто инжектить репозиторий другой сущности и сохранить сущность методом save, другое дело, что вы инжектите сервис для работы с этой сущностью, в котором выполняется не только сохранение, но и некая бизнес логика - например, рассылка писем, пуш уведомление, валидация и т.д.
Сломаться может следующее (как вариант):
circular dependencies - https://www.baeldung.com/circular-dependencies-in-...
почти похожая ситуация может быть и на модульном уровне, когда у вас есть 2 модуля, которые зависят друг от друга и собрать подобный проект не предоставляется возможным.