2017-10-03 11 views
0

は、私は小さな春ブーツアプリと連携し、私はコンパイル時に私はエラーorg.hsqldb.HsqlException: user lacks privilege or object not found: USER0_.NAMEを取得します。私は前と同じエラーがあり、今は最小限のコードに再現しています。このプロジェクト構造、org.hsqldb.HsqlException:ユーザーが権限を持たないか、オブジェクトが見つかりません:USER0_.NAME

enter image description here

エラーがコントローラから方法findAll()によってトリガされ、エラー・スタックの

@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"; 
    } 
} 

重要な部分は、

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 

ありますエンティティクラスは、提供され

@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; 
    } 
} 

設けリポジトリディレクトリのインターフェイス、

public interface UserRepository extends CrudRepository<User, Long> { 

} 

ユーザコントローラクラスは、以前提供されます。必要に応じてさらに情報を提供することができます。私の意図は、すべてのユーザーの値をJSPページに渡します。私は今、すべてのユーザー値を持っていない、アプリがフォームからユーザー情報を取得し、今では何も持っていない、言及する必要があります。

それはコメントから尋ねAS、サービス・インターフェースとクラッセが提供され、

public interface UserService { 

    List<User> findAll(); 

    User findById(Long idx); 

    void save(User user); 

    void delete(Long idx); 
} 

サービスクラスの実装、

@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データベースとアプリケーションのプロパティを使用するが設けられており、

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

Appearantly、サービス・インターフェースの動作の操作のいずれも、エラーの同じセットを提供します。私のようなコードを入れた場合、

@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

は、ここでの問題は何ですか?

+1

'UserServiceImpl'クラスを提供しますか? –

+0

サービスは提供されていません。 – Arefe

答えて

0

私は@SpringBootApplicationからJpaRepositoriesAutoConfigurationを除外した、これは明らかに、ここで問題を解決しました。

@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); 
    } 
} 
関連する問題