首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >org.hsqldb.HsqlException:用户缺少特权或对象,找不到: USER0_.NAME

org.hsqldb.HsqlException:用户缺少特权或对象,找不到: USER0_.NAME
EN

Stack Overflow用户
提问于 2017-10-03 10:27:16
回答 1查看 1.3K关注 0票数 1

我使用小型Spring应用程序,在编译过程中得到错误org.hsqldb.HsqlException: user lacks privilege or object not found: USER0_.NAME。我以前也有同样的错误,现在我将它复制到最小数量的代码。这是项目结构,

错误由控制器的findAll()方法触发,

代码语言:javascript
运行
复制
    @Controller
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping(value = "/")
    public String index() {
        return "redirect:/users";
    }

    @GetMapping(value = "/users")
    public String showAllUsers(Model model) {

        // triggered by this line
        model.addAttribute("users", userService.findAll());
        return "list";
    }
}

错误堆栈的重要部分是,

代码语言:javascript
运行
复制
org.springframework.dao.InvalidDataAccessResourceUsageException: could not prepare statement; SQL [select user0_.id as id1_1_, user0_.name as name2_1_ from user user0_]; nested exception is org.hibernate.exception.SQLGrammarException: could not prepare statement

......

Caused by: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USER0_.NAME in statement [select user0_.id as id1_1_, user0_.name as name2_1_ from user user0_]

.........

Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: USER0_.NAME

提供实体类,

代码语言:javascript
运行
复制
@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @Column
    private String name;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof User)) return false;

        User user = (User) o;

        if (getId() != user.getId()) return false;
        return getName().equals(user.getName());
    }

    @Override
    public int hashCode() {
        int result = (int) (getId() ^ (getId() >>> 32));
        result = 31 * result + getName().hashCode();
        return result;
    }
}

存储库目录中提供的接口,

代码语言:javascript
运行
复制
public interface UserRepository extends CrudRepository<User, Long> {

}

更早地提供了用户控制器类。我可以提供更多的信息,如果需要。我的意图是将所有的用户值传递给JSP页面。我应该说,我现在没有任何用户价值,应用程序将从表单中获取用户信息,现在它什么也没有了。

正如它从评论中询问的那样,提供了服务接口和类,

代码语言:javascript
运行
复制
public interface UserService {

    List<User> findAll();

    User findById(Long idx);

    void save(User user);

    void delete(Long idx);
}

服务类实现,

代码语言:javascript
运行
复制
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;

    @Override
    public List<User> findAll() {
        return (List)userRepository.findAll();
    }

    @Override
    public User findById(Long idx) {
        return userRepository.findOne(idx);
    }

    @Override
    public void save(User user) {
        userRepository.save(user);
    }

    @Override
    public void delete(Long idx) {
        userRepository.delete(idx);
    }
}

我使用HSQL数据库,并提供了应用程序属性,

代码语言:javascript
运行
复制
server.port=8081
spring.mvc.view.prefix:/WEB-INF/jsp/
spring.mvc.view.suffix:.jsp
spring.thymeleaf.cache=false
spring.application.name=Bootstrap Spring Boot
spring.thymeleaf.enabled=true 
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.devtools.restart.additional-paths=.
security.basic.enabled=true
security.user.name=john
security.user.password=123

spring.datasource.url=jdbc:hsqldb:file:db/registration;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver
spring.datasource.username=testuser
spring.datasource.password=testpassword
server.error.path=/error
server.error.whitelabel.enabled=false


# Keep the connection alive if idle for a long time (needed in production)
spring.datasource.testWhileIdle=true
spring.datasource.validationQuery=SELECT 1
# ===============================
# = JPA / HIBERNATE
# ===============================
# Use spring.jpa.properties.* for Hibernate native properties (the prefix is
# stripped before adding them to the com.boot.registration.entity manager).
# Show or not log for each sql query
spring.jpa.show-sql=true
# Hibernate ddl auto (create, create-drop, update): with "update" the database
# schema will be automatically updated accordingly to java entities found in
# the project
spring.jpa.hibernate.ddl-auto=create
# Allows Hibernate to generate SQL optimized for a particular DBMS
spring.messages.basename=validation

Update

表面上,服务接口的任何操作都不能工作,并提供相同的错误集。例如,如果我把代码放在,

代码语言:javascript
运行
复制
@GetMapping(value = "/users")
    public String showAllUsers(Model model) {

        User user = new User();
        user.setId(1L);
        user.setName("Berlin");

        userService.save(user);

//        model.addAttribute("users", userService.findAll());
        return "list";
    }

我仍然有相同的错误Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: USER0_.NAME

这里有什么问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-03 13:00:02

我已经将JpaRepositoriesAutoConfiguration排除在@SpringBootApplication之外,这显然解决了这里的问题。

代码语言:javascript
运行
复制
@EnableTransactionManagement
@SpringBootApplication(scanBasePackages = {"com.boot"} , exclude = JpaRepositoriesAutoConfiguration.class)
public class WebApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(WebApplication.class);
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(WebApplication.class, args);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46542437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档