无法使用UUID和springboot jpa从MySQL检索记录

问题描述 投票:0回答:1

我使用 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;
}
java mysql spring jpa jdbc
1个回答
0
投票

尝试执行以下操作:

  1. 在抽象类中定义Id如下: @ID @GenerateValue(生成器 = "uuid") @GenericGenerator(名称 = "uuid", 策略 = "uuid2") 私有字符串 ID;

  2. 我相信 ArticleEntity 应该扩展 BaseEntity 基类。

  3. 尝试调用repository.findById(String id),提供id作为参数。您不需要在存储库接口中再次定义此方法,因为它已经存在于 JpaRepository 中。

© www.soinside.com 2019 - 2024. All rights reserved.