Может какой то параметр есть для этого или аннотация?
Specification<T> & Criteria API. А на больших проектах тут уже использовать Hibernate Search, ElasticSearch, Apache Lucene public Specification<User> applicationSpecification(
// search arguments
) {
return (root, query, criteriaBuilder) -> {
List<Predicate> predicates = new ArrayList<>();
if (StringUtils.isNotBlank(status)) {
Predicate predicate = criteriaBuilder.like(// Your code here);
predicates.add(predicate);
}
// other search conditions
return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
};
}Converter<S,T> содержащийся в Spring. Он принимает 2 дженерика - source & target. EventDTOMapper implements Converter<EventDTO, Event>@PostMapping("") можно не указывать скобки, а просто @PostMapping. return ResponseEntity(created, HttpStatus.OK)ResponseEntity.ok(created);Следуя документации, hibernate должен сам подтягивать по id нужный Subject из бд, но он этого не делает, ругаясь на отсутствие конструктора.
<mapping class="hibernate.entity.User"/><?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.url">jdbc:mysql://localhost:3306/spring_course</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.username">root</property>
<property name="connection.password">springcourse</property>
<property name="current_session_context_class">thread</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<mapping class="hibernate.entity.User"/>
</session-factory>
</hibernate-configuration> List<Foo> или любую другую коллекцию не самая лучшая идея.Stream<Foo>FooRepository {
@QueryHints(value = {
@QueryHint(name = HINT_FETCH_SIZE, value = "1000"),
@QueryHint(name = HINT_CACHEABLE, value = "false"),
@QueryHint(name = READ_ONLY, value = "true")
})
@Query(value = "SELECT DISTINCT f FROM Foo f")
@Transactional(readOnly = true)
Stream<Foo> findFoos();
}parallelStream()map() и в конце сохранить...@Async и используйте @Scheduled (или возможности Spring Batch, Spring Quartz)Но т.к. могут быть разные шаблоны html, то невозможно хранить данные для заполнения в одном конкретном классе.
Краткий принцип работы: происходит добавления емейла в очередь в БД, через некоторое время специальный сервис отправляет это сообщение.
th:href="@{findOne/(id=${tour.id})}"Converter<S, T> или же либу MapStruct, ModelMapper и др.BeanUtils.copyProperties() например, для обновления сущности.@ResponseBody
public Tour findOne(Integer id) {
return tourRepository.findById(id).get();
}get() лучше использовать например, orElseThrow() и выбросить исключение, которое впоследствиее можно при помощи ExceptionHandler обработать и вернуть корректный http ответ. Например, когда объект не найден (404) @Autowired
private TourRepository tourRepository;
@PostMapping("/save")
public String save(@ModelAttribute(name = "tour") Tour tour) {
tourRepository.save(tour);
return "redirect:/";
}
@PostMapping("/admin/saveTour")
public String saveTourInModal(@ModelAttribute(name = "tour") Tour tour) {
tourRepository.save(tour);
return "redirect:/admin/tourList";
}Само модальное окно вызывается и заполняется данными объекта. После нажатия на кнопку сохранения, у меня стало выводить исключение org.hibernate.exception.ConstraintViolationException: could not execute statement, и что поля бд title и description не могут быть null.
Hibernate: update tour set description=?, end_time=?, image=?, price=?, start_time=?, title=? where code=?Hibernate: insert into tour (description, end_time, image, price, start_time, title) values (?, ?, ?, ?, ?, ?)addAll(). либо же раз решили итерировать, тоadd() и remove()List<Address> addressList = oldUser.getAddress()getAddress() подразумевает получение одного адреса, а не списка адресов пользователя. Должно быть getAddresses(), ну а метод getAddress() должен возвращать 1 адресclass Rate {
@ManyToOne(fetch = FetchType.LAZY)
private Tarif tarif;
@ManyToOne(fetch = FetchType.LAZY)
private TarifGarant tarifGarant;
}
class Tarif {
@OneToMany(
mappedBy = "tarif",
cascade = CascadeType.ALL,
orphanRemoval = true
)
private List<Rate> rates;
}
class TarifGarant {
@OneToMany(
mappedBy = "tarifGarant",
cascade = CascadeType.ALL,
orphanRemoval = true
)
private List<Rate> rates;
} <!-- https://mvnrepository.com/artifact/org.hibernate.orm/hibernate-core -->
<dependency>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-core</artifactId>
<version>6.0.0.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.6.8.Final</version>
</dependency><!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.6.6</version>
</dependency>@Embeddable для Activity и вместо связи OneToMany для List использовтаь @ElementCollection или @CollectionOfElements для List<Address>@EmbeddedId https://www.baeldung.com/spring-jpa-embedded-metho... @Embeddable & @Embedded<dependency>
<groupId>com.vladmihalcea</groupId>
<artifactId>hibernate-types-52</artifactId>
<version>2.2.2</version>
</dependency>@Type(type = "jsonb")
@Column(columnDefinition = "jsonb")
private List<Child> children;+----------+------------+----------+
| order_id | product_id | quantity |
+----------+------------+----------+
| 1 | 2 | 10 |
| 2 | 3 | 11 |
+----------+------------+----------+Product {
long productId;
}
Order {
long orderId;
}
OrderData {
Order order;
Product product;
int quantity;
}Product {
long productId;
}
Order {
@MapKeyColumn(name = "product_id")
@Column(name = "quantity")
Map<Long, Integer>
}void addArticleToAuthor(Article article)author.save()Converter<S,T>Оптимальность, чтобы не надо было передавать лишних полей, если они не заносятся в таблицу или автогенерируются
В JSON в поле one-to-many (например при создании юзера у него будут животные) чтобы передавался только массив idшников животных, а не полностью вся информация о них (частично пересекается с первым пунктом - оптимальность)
setPets()или метод addPet()