【发布时间】: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