我使用 uuid 作为 MySQL 数据库的 id。但是当我尝试使用 id 检索时,它返回 null 而不是正确的对象。我使用工作台交叉检查数据库,记录在那里,但在尝试使用 JPA 时无法检索。我有以下课程
基础实体:
@Getter(AccessLevel.PUBLIC)
@MappedSuperclass
public abstract class BaseEntity {
@Id()
@GeneratedValue(strategy = GenerationType.UUID)
UUID id;
@CreationTimestamp
Date createdAt;
}
文章仓库:
@Repository
public interface ArticlesRepository extends JpaRepository<ArticleEntity, UUID> {
ArticleEntity findBySlug(String slug);
Optional<ArticleEntity> findById(UUID id);
}
文章服务:
@Service
public class ArticlesService {
public final ArticlesRepository articlesRepository;
public final UsersRepository usersRepository;
public ArticlesService(
ArticlesRepository articlesRepository,
UsersRepository usersRepository
) {
this.articlesRepository = articlesRepository;
this.usersRepository = usersRepository;
}
public List<ArticleEntity> getAllArticles(){
List<ArticleEntity> articlesIterable = articlesRepository.findAll();
return StreamSupport.stream(articlesIterable.spliterator(),false)
.collect(Collectors.toList());
}
public ArticleEntity getArticleBySlug(String slug){
var article = articlesRepository.findBySlug(slug);
if(slug==null){
return null;
}
return article;
}
public ArticleEntity createArticle(CreateArticleDTO createArticleDTO, String authorUsername){
var author = usersRepository.findByUsername(authorUsername);
return articlesRepository.save(
ArticleEntity.builder()
.title(createArticleDTO.getTitle())
.slug(createArticleDTO.getTitle().toLowerCase().replaceAll(" ","-"))
.subtitle(createArticleDTO.getSubtitle())
.body(createArticleDTO.getBody())
.author(author)
.build()
);
}
public Optional<ArticleEntity> getArticleById(UUID id){
return articlesRepository.findById(id);
}
}
Whenever I try to get a record using the UUID, I am getting null as opposed to the record.
尝试将 UUID 作为 VARCHAR 存储在 MySQL 数据库中,但这也不起作用:
public abstract class BaseEntity {
@Id()
@GeneratedValue(strategy = GenerationType.UUID)
@JdbcTypeCode(SqlTypes.BINARY)
UUID id;
@CreationTimestamp
Date createdAt;
}
尝试执行以下操作:
在抽象类中定义Id如下: @ID @GenerateValue(生成器 = "uuid") @GenericGenerator(名称 = "uuid", 策略 = "uuid2") 私有字符串 ID;
我相信 ArticleEntity 应该扩展 BaseEntity 基类。
尝试调用repository.findById(String id),提供id作为参数。您不需要在存储库接口中再次定义此方法,因为它已经存在于 JpaRepository 中。