【问题标题】:How to put JSONB throught Postgres database with JPA如何使用 JPA 将 JSONB 通过 Postgres 数据库
【发布时间】:2017-10-14 00:11:31
【问题描述】:

我正在尝试使用 Jersey、Gson、JPA 构建一个 REST 应用程序,我想将一个 JSON 对象放到 JSON or JSONB 数据库字段到 Postgres 中。

我试图做这样的事情:How to use Postgres JSONB datatype with JPA? 但我的表看到的是“VARCHAR”类型而不是“JSONB”。

我的实体:

@Entity
@Table(name = "votes")

public class Votes {

@Id
@GeneratedValue
private int id;
private int idSocialChoice;

@Convert(converter=JsonConverter.class)
private JsonObject vote;

public Votes() {
}

public JsonObject getVote() {
    return vote;
}

public void setVote(JsonObject vote) {
    this.vote = vote;
}

public int getIdSocialChoice() {
    return idSocialChoice;
}

public void setIdSocialChoice(int idSocialChoice) {
    this.idSocialChoice = idSocialChoice;
}

我如何插入我的实体:

Votes votes0 = new Votes();
votes0.setIdSocialChoice(3);

JsonObject object = Json.createObjectBuilder().build();
votes0.setVote(object);

List<Votes> listvotes = new ArrayList<Votes>();
listvotes.add(votes0);

ModelEntities.insertVotes(listvotes);

方法插入投票:

public static void insertVotes(List<Votes> animalList) {

    CrudServiceBean crudServiceBean = new CrudServiceBean(CrudServiceBean.PU_DB);
    crudServiceBean.newTransaction();

    for(Votes votes : animalList)
        crudServiceBean.create(votes);

    crudServiceBean.commit();

    crudServiceBean.closeTransaction();

}

crudServiceBean.create 的方法 create :

public  <T> T create(T t) {
    this.em.persist(t);
    this.em.flush();
    this.em.refresh(t);
    return t;
}

我的 JPA 提供程序像这样创建我的架构 (createDDL_ddlGeneration.sql):

CREATE TABLE votes (ID INTEGER NOT NULL, IDSOCIALCHOICE INTEGER, VOTE VARCHAR(255), PRIMARY KEY (ID))

我也会避免使用 Hibernate。

谢谢。

【问题讨论】:

  • “它不起作用”(TM)。我确定一定会发生某些事情,可能是异常,也可能是日志中的一条 SQL,但是说“它不起作用”对于这里诊断您的问题的人来说几乎没有用处
  • @NeilStockton 我已将 JsonConverter 类添加到我的项目中,但我不知道我需要在我的 Entity 属性值中添加哪个注释。所以现在我在属性上有“'Basic'属性类型不应该是地图”。
  • 您按照 JPA AttributeConverter 指南(例如 datanucleus.org/products/accessplatform_5_1/jpa/…)进行配置。如果您遇到一些异常,那么您在问题中说明异常+堆栈跟踪以及哪个 JPA 提供程序
  • @NeilStockton 好的,我已经添加了所需的注释。知道一切正常,除了我的数据库检测到“BYTEA”而不是“jsonb”
  • 这意味着什么?您创建了架构?还是您的 JPA 提供商创建了它?在这种情况下发布创建的模式,以及通过什么过程。然后使用的SQL

标签: java json postgresql jpa


【解决方案1】:

我终于找到了问题所在。我在我的属性上忘记了这一行:

@Column (nullable = true, columnDefinition = "jsonb")

【讨论】:

    猜你喜欢
    • 2017-02-11
    • 2018-05-31
    • 1970-01-01
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    • 2018-02-05
    • 2022-12-03
    • 1970-01-01
    相关资源
    最近更新 更多