Java HQL org.hsqldb.HsqlException:用户缺少权限或找不到对象

Posted

技术标签:

【中文标题】Java HQL org.hsqldb.HsqlException:用户缺少权限或找不到对象【英文标题】:Java HQL org.hsqldb.HsqlException: user lacks privilege or object not found 【发布时间】:2014-08-20 10:14:09 【问题描述】:

我正在使用 Spring 3 和 Hibernate 3。我正在使用 DAO 设计模式并使用 HQL 来查询数据库。但是,当搜索某个字段不存在的数据时,出现以下异常:

org.hsqldb.HsqlException: user lacks privilege or object not found: ADDRESS2

我正在使用 Liquidbase 来管理创建表的数据库 XML 模式。下面是示例代码:

@Entity
@Table(name = "message")
public class Message() 

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    @Column(length = 100, nullable = false)
    private String address;

    public Message() 

    

    // getters and setters

DAO 使用以下 HQL:

 getHibernateTemplate().find("FROM Message m WHERE m.address = address2");

正在设置以下属性:

jdbc.driverClassName=org.hsqldb.jdbc.JDBCDriver
jdbc.url=jdbc:hsqldb:mem:testdb'shutdown=true
jdbc.username=sa
jdbc.password=
hibernate.dialect=org.hibernate.dialect.HSQLDialect
hibernate.show_sql=true
hibernate.hbm2ddl.auto=validate

我找不到解决方案。我可以成功插入一条记录,也可以使用相同的 HQL 查询来查找具有已保存实际值的对象,但问题在于查找不存在的值。

【问题讨论】:

有同样的问题,但对我来说,解决方案只是添加正确的方言。 (以前有mysql),因为我已经重新连接到那个。谢谢 【参考方案1】:
FROM Message m WHERE m.address = address2

此查询查找其address 字段等于其address2 字段的消息。但是消息没有address2 字段。如果您的意图是查找 address 字段值为“address2”的所有消息,则查询为

FROM Message m WHERE m.address = 'address2'

【讨论】:

【参考方案2】:

尝试:

 getHibernateTemplate().find("FROM Message m WHERE m.address = 'address2'");

【讨论】:

【参考方案3】:

检查您的数据库 URL:

你可能需要放数据库的完整路径

例如, jdbc:hsqldb:file:C:/Users/10617136/dev/hsqldb-2.3.2/hsqldb/bin/test

【讨论】:

【参考方案4】:

我觉得有线。在我将字段名称从profileImage 更改为image 后,即全部变为小写,问题就解决了。

【讨论】:

以上是关于Java HQL org.hsqldb.HsqlException:用户缺少权限或找不到对象的主要内容,如果未能解决你的问题,请参考以下文章

java Java的:休眠:查询:HQL

java hql case when 的用法

如何从 java 执行 Hive hql 文件?

如何结合 java.util.Calendar 和 HQL 之间

HQL 或 Java 持久性查询语言中的 IN 子句

java.lang.IllegalArgumentException:org.hibernate.hql.internal.ast.QuerySyntaxException:新闻未映射[来自新闻,其中