我的本机查询有类似的问题。jsonb 字段名叫做data,很简单
{
"name" : "genderList",
"displayName" : "gender list"
}
我想用 JpaRepository 按名称查找,这是我的存储库
@Repository
public interface LookupListRepository extends JpaRepository<LookupList, UUID>
{
@Query(value = "SELECT * FROM lookup_list WHERE data->>'name' = :name",
nativeQuery = true)
List<LookupList> findByName(@Param("name") String name);
}
你需要nativeQuery = true。使用nativeQuery = true,这也适用。
SELECT * FROM lookup_list WHERE jsonb_extract_path_text(data, 'name') = :name
我看到您的 @Transactional 注释,我假设您在应用程序服务方法之上具有本机查询。您可以尝试移动存储库中的所有本机查询并使用 JpaRepository,并在您的应用程序服务中使用存储库方法吗?以下是我的应用程序服务如何使用存储库。
public class LookupListServiceImpl implements LookupListService
{
@Autowired
LookupListRepository lookupListRepository;
@Override
@Transactional
public void changeLookupList(LookupListDto lookupListDto)
{
List<LookupList> lookupLists = lookupListRepository.findByName(lookupListDto.getName());
...
}
}
JPA 存储库参考
http://docs.spring.io/spring-data/jpa/docs/1.3.0.RELEASE/reference/html/jpa.repositories.html