JPA 2.1 将字符串持久化为枚举 postgres
JPA 2.1 persist string as enum postgres
我正在使用 JPA 2.1 在我的数据库上执行 CRUD 操作。我使用 JPA 工具 -> 从表选项 生成实体从预先存在的数据库生成实体。这创建了一个名为 Item 的 Java 实体。
数据库 table 项目有一个类型为枚举 item_status
的列,它在 [=43] 中创建为 String 类型=]实体。现在,我尝试使用以下方法将一列插入 table 项目中,但出现此错误
错误:列 "status" 的类型为 item_status,但表达式的类型为字符变化。提示:您需要重写或转换表达式。
Item_Test_CRUD.java
// 这里我尝试测试是否可以插入数据库
@Test
void test_insert_into_db() {
DBConnection conx = new DBConnection(); // here I get the message login successful, so I assume the connection to the DB is okay
Item it = new Item();
it.setStatus("Rework");
it.setUpdatedAt(new Timestamp(System.currentTimeMillis()));
it.setMetadata("{}");
conx.insert(it);
}
// 我正在使用 EntityManager 连接到数据库
DBConnection.java
public void insert(Object obj) {
this.em.getTransaction().begin();
this.em.persist(obj);
this.em.getTransaction().commit();
}
// JPA工具生成的实体
Item.java
@Entity
@Table(name="\"Items\"")
@NamedQuery(name="Item.findAll", query="SELECT i FROM Item i")
public class Item implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Convert(converter=UUIDConverter.class)
private String id;
.
.
@Column(name="status")
private String status;
.
.
}
知道我在这里犯了什么错误吗?
通过向连接字符串添加 stringtype=unspecified 解决了该问题。我不必将 java 实体列的类型更改为枚举。只是将其保留为 String 类型。
更多信息:whosebug.com/a/43125099/270371
https://jdbc.postgresql.org/documentation/94/connect.html
我正在使用 JPA 2.1 在我的数据库上执行 CRUD 操作。我使用 JPA 工具 -> 从表选项 生成实体从预先存在的数据库生成实体。这创建了一个名为 Item 的 Java 实体。
数据库 table 项目有一个类型为枚举 item_status
的列,它在 [=43] 中创建为 String 类型=]实体。现在,我尝试使用以下方法将一列插入 table 项目中,但出现此错误
错误:列 "status" 的类型为 item_status,但表达式的类型为字符变化。提示:您需要重写或转换表达式。
Item_Test_CRUD.java
// 这里我尝试测试是否可以插入数据库
@Test
void test_insert_into_db() {
DBConnection conx = new DBConnection(); // here I get the message login successful, so I assume the connection to the DB is okay
Item it = new Item();
it.setStatus("Rework");
it.setUpdatedAt(new Timestamp(System.currentTimeMillis()));
it.setMetadata("{}");
conx.insert(it);
}
// 我正在使用 EntityManager 连接到数据库 DBConnection.java
public void insert(Object obj) {
this.em.getTransaction().begin();
this.em.persist(obj);
this.em.getTransaction().commit();
}
// JPA工具生成的实体 Item.java
@Entity
@Table(name="\"Items\"")
@NamedQuery(name="Item.findAll", query="SELECT i FROM Item i")
public class Item implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Convert(converter=UUIDConverter.class)
private String id;
.
.
@Column(name="status")
private String status;
.
.
}
知道我在这里犯了什么错误吗?
通过向连接字符串添加 stringtype=unspecified 解决了该问题。我不必将 java 实体列的类型更改为枚举。只是将其保留为 String 类型。 更多信息:whosebug.com/a/43125099/270371 https://jdbc.postgresql.org/documentation/94/connect.html