Здраствуйте. У меня есть PostEntity, PostDto и есть OrikaMapper.
package com.egsians.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PostDto {
private Long id;
private Long userId;
private String text;
private Date date;
private List<HashTagDto> hashTags;
private List<ImageDto> images;
}
package com.egsians.model;
import lombok.Data;
import org.hibernate.annotations.CreationTimestamp;
import javax.persistence.*;
import java.util.Date;
import java.util.List;
@Data
@Entity
@Table(name = "posts", indexes = {
@Index(name = "posts_id_IDX", columnList = "id"),
@Index(name = "posts_user_id_IDX", columnList = "user_id")
})
public class PostEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "user_id")
private UserEntity user;
@Column(name = "text", nullable = false, length = 1000)
private String text;
@CreationTimestamp
private Date date;
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "post_id")
private List<ImageEntity> images;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "posts_hash_tags",
joinColumns = @JoinColumn(name = "post_id"),
inverseJoinColumns = @JoinColumn(name = "hash_tag_id")
)
private List<HashTagEntity> hashTags;
}
package com.egsians.mapper;
import com.egsians.dto.HashTagDto;
import com.egsians.dto.ImageDto;
import com.egsians.dto.PostDto;
import com.egsians.model.PostEntity;
import com.egsians.model.UserEntity;
import com.egsians.repository.UserRepository;
import ma.glasnost.orika.CustomMapper;
import ma.glasnost.orika.MapperFactory;
import ma.glasnost.orika.MappingContext;
import ma.glasnost.orika.impl.ConfigurableMapper;
import org.springframework.stereotype.Component;
import java.util.Optional;
import java.util.stream.Collectors;
@Component
public class PostMapper extends ConfigurableMapper {
private final UserRepository userRepo;
private final HashTagMapper hashTagMapper;
private final ImageMapper imageMapper;
public PostMapper(UserRepository userRepo,
HashTagMapper hashTagMapper,
ImageMapper imageMapper) {
this.userRepo = userRepo;
this.hashTagMapper = hashTagMapper;
this.imageMapper = imageMapper;
}
@Override
protected void configure(MapperFactory factory) {
factory.classMap(PostEntity.class, PostDto.class)
.customize(new CustomMapper<PostEntity, PostDto>() {
@Override
public void mapAtoB(PostEntity postEntity, PostDto postDto, MappingContext context) {
postDto.setUserId(postEntity.getUser().getId());
postDto.setId(postEntity.getId());
postDto.setDate(postEntity.getDate());
postDto.setText(postEntity.getText());
postDto.setHashTags(postEntity.getHashTags()
.stream().map(hashTag -> hashTagMapper.map(hashTag, HashTagDto.class))
.collect(Collectors.toList()));
postDto.setImages(postEntity.getImages()
.stream().map(image -> imageMapper.map(image, ImageDto.class))
.collect(Collectors.toList()));
}
})
.register();
factory.classMap(PostDto.class, PostEntity.class)
.field("id", "id")
.field("text", "text")
.field("date", "date")
.field("hashTags", "hashTags")
.field("images", "images")
.byDefault()
.customize(new CustomMapper<PostDto, PostEntity>() {
@Override
public void mapAtoB(PostDto postDto, PostEntity postEntity, MappingContext context) {
Optional<UserEntity> optionalUser = userRepo.findById(postDto.getUserId());
optionalUser.ifPresent(postEntity::setUser);
}
}).register();
}
}
Когда вызываю метод postMapper.map(postEntity,PostDto.class), он мне выдает результат, в котором поле userId всегда null. Можно ли как нибудь исправить?
В PostMapper есть класс CustomMapper, а в нем метод mapAToB. Так как я работаю с Spring Boot-ом, мне помог аннотатия @Transactional(readOnly = true)
, поставленный перед методом mapAToB.
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть массив со словами, как вывести слова в массиве по алфавиту и посчитать сколько одинаковых слов, например:
Есть таблица постов post от пользователей такого вида: