我正在开发一个迁移软件,它将使用来自REST服务的未知数据.

我已经考虑过使用MongoDB,但我决定不使用它,而是使用PostgreSQL.

读完this后,我试图用Spring JPA在我的SpringBoot应用程序中实现它,但我不知道如何在实体中映射jsonb.

试了this次,但什么都不懂!

我就在这里:

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

我该怎么做?

Note: I don't want/need an Entity to work on. My JSON will always be String but I need jsonb to query the DB

推荐答案

添加Spring数据JPA只是为了执行一个简单的insert语句,这让事情变得过于复杂.您没有使用任何JPA功能.相反,请执行以下操作

  1. spring-boot-starter-jdbc代替spring-boot-starter-data-jpa
  2. 删除你的DnitRepository界面
  3. 在哪里注射JdbcTemplate在哪里注射DnitRepository
  4. jdbcTemplate.executeUpdate("insert into dnit(id, data) VALUES (?,to_json(?))", id, data);代替dnitRepository.insertdata(2, someJsonDataAsString );

您已经在使用普通SQL(以一种非常复杂的方式),如果您需要普通SQL(并且不需要JPA),那么就使用SQL.

当然,与直接将JdbcTemplate注入控制器不同,您可能希望在存储库或服务中隐藏这种逻辑/复杂性.

Postgresql相关问答推荐

可以向判断枚举值的SQL列添加约束吗?

Psql:Windows 10上奇怪的错误输出编码

Postgres查询按月和年分组的总计数

无法在kubernetes中设置postgres复制

使用 pgx 扫描范围类型

postgres vacuum 是否改进了我的查询计划

Postgres 转储按顺序插入

如何将 JSONB 对象数组合并为 PostgreSQL 中的单个对象

我可以在 Ruby on Rails 上编写 PostgreSQL 函数吗?

PG::TRDeadlockDetected:ERROR: deadlock detected

如何在 Postgres 中的列上删除唯一约束?

INSERT RETURNING 是否保证以 right的顺序返回?

在 PostgreSQL docker 镜像中创建表

如何通过我在 PostgreSQL 中的数据库获取列大小和类型

在 PostgreSQL 中的表上禁用 DELETE?

如何语法判断 PostgreSQL 配置文件?

判断materialized视图的上次刷新时间

使用 Postgresql 数据库(OSX Lion)创建 Rails 3.1 应用程序

删除空行

调用 getNextException 来查看原因:如何让 Hibernate / JPA 显示异常的数据库服务器消息