我正在尝试使用投影接口从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错误。
1条答案
按热度按时间gpnt7bae1#
您的查询:
@Query(nativeQuery = true, value = "select user_id as userId from user_test")
***将从user_test表返回一个userId列表,而不是UserProjection***列表。因此,您可以声明一个构造函数并将值投影到该构造函数中,或者在查询方法中只返回一个userId列表。只需尝试以下操作:或者
在应用第二种方法之前,请确保已为该单个字段定义了构造函数。
注意:full_dto_path表示用户投影dto的完全限定路径。
希望这能奏效。