如何使用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 );

}

还有…

@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)

)

我怎样才能做到这一点?

回答:

通过添加Spring Data JPA只是为了执行一个简单的insert语句,您使事情变得过于复杂。您没有使用任何JPA功能。而是执行以下操作

  1. 替换spring-boot-starter-data-jpaspring-boot-starter-jdbc
  2. 删除DnitRepository界面
  3. 进样JdbcTemplate,你在那里注射DnitRepository
  4. 替换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

回到顶部