spring-data-jpa 无法使用投影MapSpring JPA中的数据类型

rwqw0loc  于 2022-11-10  发布在  Spring
关注(0)|答案(1)|浏览(203)

我正在尝试使用投影接口从Posgresql DB中获取数据,但无法将UUID正确Map到投影。我可以始终将其转换为文本或字节,然后再转换回UUID,但这对于具有多个查询的整个项目来说不是最有效的方法。
UserProjection.class

import java.util.UUID;
public interface UserProjection {
UUID getUserId();
}

UserTestRepo.class

import java.util.List;
import java.util.UUID;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
@Repository
public interface UserTestRepo extends JpaRepository<UserTest, UUID> {   
@Query(nativeQuery = true, value = "select user_id as userId from user_test")
    public List<UserProjection> getProjectionData();
}

UserTest.class

import java.util.UUID;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.Type;
@Table(name = "user_test")
@Entity
public class UserTest {
    @Id
    @Column(name = "user_id")
    @Type(type = "uuid-char")
    public UUID userId;
}

执行语句:

List<UserProjection> list = userRepo.getProjectionData();
        System.out.println(list.get(0).getUserId());

PosgresSQL结构是一个简单的UUID条目。我没有获得JDBC类型的方言Map:1111错误。

gpnt7bae

gpnt7bae1#

您的查询:@Query(nativeQuery = true, value = "select user_id as userId from user_test")***将从user_test表返回一个userId列表,而不是UserProjection***列表。因此,您可以声明一个构造函数并将值投影到该构造函数中,或者在查询方法中只返回一个userId列表。只需尝试以下操作:

@Query(nativeQuery = true, value = "select user_id as userId from user_test")
public List<UUID> getProjectionData();

或者

@Query(nativeQuery = false, value = "select new full_dto_path.UserProjection(user_id) from UserTest")
 public List<UserProjection> getProjectionData();

在应用第二种方法之前,请确保已为该单个字段定义了构造函数。
注意:full_dto_path表示用户投影dto的完全限定路径。
希望这能奏效。

相关问题