如何使用SpringBoot + JPA存储PostgreSQL jsonb?
我正在开发一种迁移软件,它将使用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 );
}
还有…
@RestControllerpublic 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)
)
我怎样才能做到这一点?
回答:
通过添加Spring Data JPA只是为了执行一个简单的insert语句,您使事情变得过于复杂。您没有使用任何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
您可能希望将逻辑/复杂性隐藏在存储库或服务中,而不是直接将其注入到控制器中。
以上是 如何使用SpringBoot + JPA存储PostgreSQL jsonb? 的全部内容, 来源链接: utcz.com/qa/435045.html