2015-03-16 3 views
0

Я пытаюсь создать таблицу SQL Transaction, которая содержит два внешних ключа из двух других таблиц: User и Car.
Car.javaОшибка при создании таблицы SQL. Классы Eban

@Entity 
public class Car extends Model{ 

    @Id 
    @GeneratedValue 
    public int id; 
    @ManyToOne 
    @JoinColumn(name="user_fk") 
    public User user; 
    @OneToOne(cascade=CascadeType.ALL, mappedBy="car") 
    public Transaction transaction; 
} 

User.java

@Entity 
public class User extends Model{ 

    @Id 
    @GeneratedValue 
    public int id; 
    @OneToMany(cascade=CascadeType.ALL, mappedBy="user") // If we delete a user, all the object belongs to this user are deleted. 
    public List<Car> cars = new ArrayList<Car>(); 
    @OneToOne(cascade=CascadeType.ALL, mappedBy="user") 
    public Transaction transaction; 
} 

Transaction.java

@Entity 
@Table(name = "transactions") 
public class Transaction extends Model{ 

    @Id 
    @GeneratedValue 
    public int id; 
    @OneToOne 
    @JoinColumn(name = "user_fk") 
    public User user; 
    @OneToOne 
    @JoinColumn(name = "car_fk") 
    public Car car; 
} 

Это сгенерированный transactions таблица сценария

create table transactions (
id      integer not null, 
user_fk     integer, 
car_fk     integer, 
from      timestamp, 
to      timestamp, 
availability    boolean, 
constraint pk_transactions primary key (id)) 

alter table transactions add constraint fk_transactions_user_4 foreign key (user_fk) references user (id) on delete restrict on update restrict; 
create index ix_transactions_user_4 on transactions (user_fk); 
alter table transactions add constraint fk_transactions_car_5 foreign key (car_fk) references car (id) on delete restrict on update restrict; 
create index ix_transactions_car_5 on transactions (car_fk); 

И я получил следующее сообщение об ошибке:

Syntax error in SQL statement "CREATE TABLE TRANSACTIONS (ID INTEGER NOT NULL, USER_FK INTEGER, CAR_FK INTEGER, FROM[*] TIMESTAMP, TO TIMESTAMP, AVAILABILITY BOOLEAN, CONSTRAINT PK_TRANSACTIONS PRIMARY KEY (ID)) "; expected "identifier"; SQL statement: create table transactions (id integer not null, user_fk integer, car_fk integer, from timestamp, to timestamp, availability boolean, constraint pk_transactions primary key (id)) [42001-175] [ERROR:42001, SQLSTATE:42001], while trying to run this SQL script

Что я сделал не так?

+0

использовать backticks, чтобы избежать резервных слов – silentprogrammer

ответ

1
CREATE TABLE TRANSACTIONS ( 
ID INTEGER NOT NULL, 
USER_FK INTEGER, 
CAR_FK INTEGER, 
FROM[*] TIMESTAMP, 
TO TIMESTAMP, 
AVAILABILITY BOOLEAN, 
CONSTRAINT PK_TRANSACTIONS PRIMARY KEY (ID)) 

Ошибка заключается в использовании FROM в качестве имени столбца. FROM является зарезервированным словом, и нет абсолютно никаких оснований когда-либо использовать зарезервированное слово в качестве имени столбца http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html. Поэтому просто выберите имя, которое не является зарезервированным словом.

+0

Я думал, что транзакции были зарезервированным именем, я сосредоточился на этом слове. Чем нужна помощь! – Mornor

+1

Я бы тоже избегал такого имени, чтобы кто-то другой мог неправильно его понять позже. –

Смежные вопросы