JPA 2.1将字符串保留为枚举postgres

时间:2018-07-30 17:57:25

标签: java jpa jpa-2.0 jpa-2.1

我正在使用JPA 2.1在我的数据库上执行CRUD操作。我使用 JPA工具->从表生成选项从现有数据库生成了实体。这创建了一个名为Item的Java实体。

数据库表项目的列类型为枚举 item_status ,该列在Java实体中作为字符串类型创建。现在,我尝试使用以下方法在表Item中插入一列,并收到此错误

错误:列“状态”的类型为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;
    .
    .
}

你知道我在这里犯什么错误吗?

1 个答案:

答案 0 :(得分:0)

通过在连接字符串中添加 stringtype = unspecified 解决了该问题。我不必将Java实体列的类型更改为枚举。只是将其保留为String类型。 有关更多信息:stackoverflow.com/a/43125099/270371 https://jdbc.postgresql.org/documentation/94/connect.html