3
Jersey、Gson、JPAを使用してRESTアプリケーションを構築しようとしています.JSONオブジェクトをJSON or JSONB Postgresにデータベースフィールドに入れたいと思います。JSONBをJPAでPostgresデータベースに挿入する方法
私はHow to use Postgres JSONB datatype with JPA?のように何かしようとしましたが、私のテーブルには 'JSONB'の代わりに 'VARCHAR'タイプがあります。
マイエンティティ:私は私のエンティティを挿入する方法
@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);
方法insertVotes:
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の作成:
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))
私はまた、休止状態を使用することを避けるだろう。
ありがとうございます。
"それは動作しません"(TM)。私は何かが起こる必要があります、おそらく例外、おそらくログのSQLが、 "それは動作しません"と言うあなたの問題を診断する人々のためのほとんど役に立たないです –
@NeilStockton私はプロジェクトにクラスJsonConverterを追加しましたが、エンティティ属性値にどのアノテーションを入れる必要があるのか分かりません。だから私は "基本的な属性タイプは、マップであるべきではありません"属性を超えています。 –
http://www.datanucleus.org/products/accessplatform_5_1/jpa/mapping.html#attributeconverterのようなJPA AttributeConverterガイドに従って、設定してください。例外が発生した場合は、例外+スタックトレースとJPAプロバイダ –