【问题标题】:Java HQL org.hsqldb.HsqlException: user lacks privilege or object not foundJava HQL org.hsqldb.HsqlException:用户缺少权限或找不到对象
【发布时间】: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),因为我已经重新连接到那个。谢谢

标签: java spring hibernate hql hsqldb


【解决方案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 后,即全部变为小写,问题就解决了。

        【讨论】:

          猜你喜欢
          • 2019-05-31
          • 2014-08-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-01
          • 2013-03-06
          • 2017-06-14
          • 2017-08-31
          相关资源
          最近更新 更多