org.postgresql.util.PGobject无法转换为java.lang.String

3

我可以帮您翻译中文,以下是需要翻译的内容:

我正在尝试学习如何使用PostgreSQL数据库和JAVA枚举,但在强制转换时遇到了一些问题。

这是我的SQL代码:

CREATE TYPE enum_created_from AS ENUM ('CHAT', 'WEB');
ALTER TABLE contact ADD COLUMN created_from enum_created_from;
UPDATE contact SET created_from='WEB';

枚举文件:

public enum ContactCreatedFrom {
    WEB, CHAT;
}

JAVA实体文件:

@Column(name = "CREATED_FROM")
@Enumerated(EnumType.STRING)
private ContactCreatedFrom createdFrom;

当然,这里涉及到的是获取器和设置器。

使用JUnit的@Test文件。

@Test
public void testContactCreatedFrom() 
{
    try
    {
        @SuppressWarnings("unchecked")
        List<Contact> contacts = (List<Contact>) db.createQuery("from Contact where id between 20 and 25").list();
        for (Contact c : contacts)
        {
            System.out.println("Name: " + c.getName());
            System.out.println ("Enum: " + c.getCreatedFrom());
        }
    } catch (Exception e)
    {
        System.out.println("Exception: " + e);
    }
}

我仍然遇到异常:
Exception: java.lang.ClassCastException: org.postgresql.util.PGobject cannot be cast to java.lang.String

请问有人能告诉我错在哪里吗?

谢谢!


1
抱歉,但我认为问题不在那里。在发布这个问题之前,我已经尝试过了。 - Robertas Uldukis
1个回答

2

我从Postgres文档中得到了以下解释:https://jdbc.postgresql.org/documentation/publicapi/org/postgresql/util/PGobject.html。然后将PGObject强制转换为PGObject,然后使用object.getValue()获取其String值。这似乎解决���我的问题。

import org.postgresql.util.PGobject;

public static String pgObjectToString(PGobject object){
        if(null==object) return null;
        String s = object.getValue();
        return s;
}

我已经在jdbcTemplate.queryForList中使用了String.valueOf(map.get(KEY)),现在它正常运行。 - manish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接