我正在开发一个迁移软件,它将使用来自 REST 服务的未知数据。
我已经考虑过使用 MongoDB,但我决定不使用它并使用 PostgreSQL。
阅读 此 内容后,我尝试使用 Spring JPA 在我的 SpringBoot 应用程序中实现它,但我不知道在我的实体中映射 jsonb
。
试过 这个 但什么都不懂!
这是我的位置:
@Repository
@Transactional
public interface DnitRepository extends JpaRepository<Dnit, Long> {
@Query(value = "insert into dnit(id,data) VALUES (:id,:data)", nativeQuery = true)
void insertdata( @Param("id")Integer id,@Param("data") String data );
}
和 …
@RestController
public class TestController {
@Autowired
DnitRepository dnitRepository;
@RequestMapping(value = "/dnit", method = RequestMethod.GET)
public String testBig() {
dnitRepository.insertdata(2, someJsonDataAsString );
}
}
和表格:
CREATE TABLE public.dnit
(
id integer NOT NULL,
data jsonb,
CONSTRAINT dnit_pkey PRIMARY KEY (id)
)
我怎样才能做到这一点?
注意:我不想/不需要实体来处理。我的 JSON 将始终是字符串,但我需要 jsonb 来查询数据库
原文由 Magno C 发布,翻译遵循 CC BY-SA 4.0 许可协议
通过添加 Spring Data JPA 只是为了执行一个简单的插入语句,您会使事情变得过于复杂。您没有使用任何 JPA 功能。而是执行以下操作
spring-boot-starter-data-jpa
替换为spring-boot-starter-jdbc
DnitRepository
接口JdbcTemplate
你在哪里注入DnitRepository
dnitRepository.insertdata(2, someJsonDataAsString );
替换为jdbcTemplate.executeUpdate("insert into dnit(id, data) VALUES (?,to_json(?))", id, data);
您已经在使用纯 SQL(以非常复杂的方式),如果您需要纯 SQL(并且不需要 JPA),那么只需使用 SQL。
当然,不是直接将
JdbcTemplate
注入到您的控制器中,您可能希望在存储库或服务中隐藏该逻辑/复杂性。