我正在开发一种迁移软件,它将使用REST服务中的未知数据。
我已经考虑过使用MongoDB,但我决定不使用它,而使用PostgreSQL。
阅读此内容后,我尝试使用Spring JPA在SpringBoot应用程序中实现它,但我不知道jsonb在我的实体中进行映射。
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将始终为String,但我需要jsonb来查询数据库
通过添加Spring Data JPA只是为了执行一个简单的insert语句,您使事情变得过于复杂。您没有使用任何JPA功能。而是执行以下操作
spring-boot-starter-data-jpa
spring-boot-starter-jdbc
DnitRepository
JdbcTemplate
dnitRepository.insertdata(2, someJsonDataAsString );
jdbcTemplate.executeUpdate("insert into dnit(id, data) VALUES (?,to_json(?))", id, data);
您已经在使用普通SQL(以非常复杂的方式),如果您需要普通SQL(并且不需要JPA),则只需使用SQL。
当然,JdbcTemplate您可能希望将逻辑/复杂性隐藏在存储库或服务中,而不是直接将其注入到控制器中。