Spring boot 2.0.5 и файл базы данных HSQL отображают выход из системы, пользователю не хватает привилегии или объект не найден, когда объект включает @ManyToOne - PullRequest
0 голосов
/ 10 ноября 2018

по любой причине выводится на экран ниже журнала, когда я пытаюсь запустить мое приложение Spring boot 2.0.5, а сущность имеет односторонние отношения @ManyToOne. Журналы консоли будут очищены, если @ ManyToOne удалены , приложение загружается нормально, но ошибки не отображаются.

БД устанавливается в application.properties для создания в файле (хотя тот же журнал ошибок я получаю, если БД находится в памяти). И журнал показывает правильный SQL для создания таблиц, FK и вставки новых предопределенных строк (находится в classpath: data.sql)

Я проверил другой пост и похоже, что эту проблему нелегко решить из-за множества вариантов. Какие-либо предложения? Спасибо.

Обновление к сожалению, имя таблицы не является проблемой. Я обновил до USER_ACCOUNT и получил ту же ошибку: пользователю не хватает привилегии или объект не найден: PUBLIC.USER_ACCOUNT. Это должно быть связано с аннотацией @ManyToOne, потому что, когда я удаляю ее, все загружается нормально

Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: PUBLIC.USER
at org.hsqldb.error.Error.error(Unknown Source) ~[hsqldb-2.4.1.jar:2.4.1]
at org.hsqldb.error.Error.error(Unknown Source) ~[hsqldb-2.4.1.jar:2.4.1]
at org.hsqldb.SchemaManager.getUserTable(Unknown Source) ~[hsqldb-2.4.1.jar:2.4.1]
at org.hsqldb.ParserDDL.compileAlterTable(Unknown Source) ~[hsqldb-2.4.1.jar:2.4.1]
at org.hsqldb.ParserDDL.compileAlter(Unknown Source) ~[hsqldb-2.4.1.jar:2.4.1]
at org.hsqldb.ParserCommand.compilePart(Unknown Source) ~[hsqldb-2.4.1.jar:2.4.1]
at org.hsqldb.ParserCommand.compileStatements(Unknown Source) ~[hsqldb-2.4.1.jar:2.4.1]
at org.hsqldb.Session.executeDirectStatement(Unknown Source) ~[hsqldb-2.4.1.jar:2.4.1]
at org.hsqldb.Session.execute(Unknown Source) ~[hsqldb-2.4.1.jar:2.4.1]
... 45 common frames omitted

Пользовательский объект

 @Entity
 @Table( name = "USER" )
 @Getter @Setter
 @ToString
 @EqualsAndHashCode
public class User 
{
@Id
@GeneratedValue( strategy = GenerationType.AUTO )
@Column( name = "USER_ID" )
private Integer id;

@Column( name = "USER_NAME", nullable = false  )
private String userName;

@ManyToOne
@JoinColumn( name = "USER_STATUS_ID", referencedColumnName = "USER_STATUS_ID" , nullable = false )
private UserStatus status;

@ManyToOne
@JoinColumn(  name = "USER_ROLE_ID", referencedColumnName = "USER_ROLE_ID", nullable = false  )
private UserRole role;

@JsonIgnore
@Column( name = "PASSWORD", nullable = false  )
private String password;

@Embedded
private Audit audit;
 }

объект USerRole

    @Entity
 @Table( name = "USER_ROLE" )
 @Getter @Setter
 @ToString
 @EqualsAndHashCode
 public class UserRole 
 {
@Id
@Column( name = "USER_ROLE_ID" )
private Integer id;

@Column( name = "USER_ROLE" )
@Enumerated( EnumType.STRING ) 
private UserRoleEnum role;
}

HSQLDB.log

  drop table user if exists
  drop table user_role if exists
  drop table user_status if exists
  drop sequence hibernate_sequence if exists
  create sequence hibernate_sequence start with 1 increment by 1
  create table user (user_id integer not null, created_on date, 
  updated_on date, password varchar(255) not null, user_name 
  varchar(255) not null, user_role_id integer not null, user_status_id 
  integer not null, primary key (user_id))
   create table user_role (user_role_id integer not null, user_role 
  varchar(255), primary key (user_role_id))
  create table user_status (user_status_id integer not null, 
  user_status varchar(255), primary key (user_status_id))
  alter table user add constraint FKh2wc2dtfdo8maylne7mgubowq foreign 
  key (user_role_id) references user_role
  alter table user add constraint FKo6g0t5ih8a5bsioca8qh5ukg3 foreign 
  key (user_status_id) references user_status
  INSERT INTO USER_STATUS VALUES(1,'PENDING_VERIFIED')
  COMMIT
  INSERT INTO USER_STATUS VALUES(2,'ACTIVE')
  COMMIT
  INSERT INTO USER_ROLE VALUES(1,'ADMIN')
  COMMIT
  INSERT INTO USER_ROLE VALUES(2,'USER')

COMMIT

1 Ответ

0 голосов
/ 10 ноября 2018

Вы не можете использовать пользователя как имя таблицы, так как это зарезервированное слово. см. документацию

Есть два решения.

1.Измените имя объекта от пользователя к пользователю.

2.Используйте галочки, если вы все еще хотите использовать зарезервированное слово.

mysql> CREATE TABLE interval (begin INT, end INT);
ERROR 1064 (42000): You have an error in your SQL syntax.
near 'interval (begin INT, end INT)'

mysql> CREATE TABLE `interval` (begin INT, end INT);
Query OK, 0 rows affected (0.01 sec)

Я бы порекомендовал вам перейти к 1-му решению.

...