运算符不存在:text = bigint

时间:2012-02-27 11:21:07

标签: hibernate postgresql jboss glassfish

我正在尝试将目前在glassfish 2.1上运行的应用程序用于jboss 6.1。并且有以下问题,我不认为它与应用服务器有关,而是与postgres和/或hibernate有关。

使用以下软件Postgresql 9.0,jboss上的hibernate 3.6.6和glassfish上的3.2

无论如何,这个问题。

这个命名查询:

    @NamedQuery(name="entry.updateDuplicate",
    query="UPDATE entry SET timestamp = :timestamp WHERE username = :username AND searchDocument = :searchDocument")

此代码:

    Query query = em.createNamedQuery("Entry.updateDuplicate");
    query.setParameter("timestamp", new Date(System.currentTimeMillis()));
    query.setParameter("username", username);
    query.setParameter("sDocument", sString);

    int affected = query.executeUpdate();

在日志中生成此错误:

    10:28:16,149 INFO  [STDOUT] Hibernate: update fu set c_timestamp=? where c_username=? and c_document=?
    10:28:16,165 WARN  [org.hibernate.util.JDBCExceptionReporter] SQL Error: 0, SQLState: 42883
    10:28:16,165 ERROR [org.hibernate.util.JDBCExceptionReporter] ERROR: operator does not exist: text = bigint
    Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts.
    Position: 77

表是这样的:

    TABLE fu
    (
    id bigint NOT NULL, document text, timestamp timestamp without time zone, username character varying(255), CONSTRAINT fu_pkey PRIMARY KEY (c_id)
    )

任何人都有任何想法,对我而言,它与“id”(唯一的bigInt字段)有关,但我无法弄清楚为什么或如何开始解决它。

欢迎提出任何建议!

3 个答案:

答案 0 :(得分:2)

您发布的表定义包含document text,所以searchDocument是否有任何机会使用@Lob注释?在这种情况下,这可能是您在JBoss上使用的Hibernate版本的一个问题:

http://www.shredzone.de/cilla/page/299/string-lobs-on-postgresql-with-hibernate-36.html

答案 1 :(得分:0)

名称查询参数为searchDocument,但您设置了参数sDocument。而实际的参数变量被命名为sString,这表明它不是数字类型。请尝试使用longLong(或int / Integer)等内容。

答案 2 :(得分:0)

驱动程序无法将java long转换为SQL text(postgres就像这样愚蠢)。

变量sString的类型是什么?我怀疑它是long,而不是String,但它必须是String

另外,new Date(System.currentTimeMillis())仅相当于new Date()