Bonjour,
Je me forme aux EJB3 et je rencontre des soucis lors de la création par hibernate des contraintes mysql pour implémenter les foreign key.
j'ai deux entités User et Car avec un OneToOne sur User.fashionCar. Le mode de connexion est en create-drop :
Code:
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
Code:
@Entity
@Table(name="USER")
public class User implements Serializable
{
... id ...
protected Car fashionCar;
@OneToOne
public Car getFashionCar() {
return fashionCar;
}
public void setFashionCar(Car fashionCar) {
this.fashionCar = fashionCar;
}
}
@Entity
@Table(name="CAR")
public class Car implements Serializable
{
... id ...
}
Le code sql généré est :
Code:
create table .USER (
id bigint not null auto_increment,
fashionCar_id bigint,
primary key (id)
)
create table .CAR (
id bigint not null auto_increment,
primary key (id)
)
L'usage du
. devant le nom des tables ne gêne pas MySql qui prend bien le schéma préciser dans la connection jdbc
Quote:
jdbc:mysql://localhost:3306/test
.
Lors de la déclaration des foreign key, ça se gate :
Code:
alter table .USER
add index FK27E3CB3C5F8B7E (fashionCar_id),
add constraint FK27E3CB3C5F8B7E
foreign key (fashionCar_id)
references .CAR (id)
2009-03-31 12:14:09,897 ERROR [org.hibernate.tool.hbm2ddl.SchemaExport] Unsuccessful: alter table .USER add index FK27E3CB3C5F8B7E (fashionCar_id), add constraint FK27E3CB3C5F8B7E foreign key (fashionCar_id) references .CAR (id)
2009-03-31 12:14:09,897 ERROR [org.hibernate.tool.hbm2ddl.SchemaExport] Can't create table 'test.#sql-728_1' (errno: 150)
Il semble que le
Can't create table`test.#sql-728_1` veuille dire, ton code MySql n'est pas bon ... du moins c'est la conclusion que j'en tire.
Si je précise le schéma de la table dans le alter. Le code est accepté par MYSQL :
Code:
alter table test.USER
add index FK27E3CBB4701D40 (secondCar),
add constraint FK27E3CBB4701D40
foreign key (secondCar)
references test.CAR (id)
Si je précise le schéma dans l'entité, ça passe aussi :
Code:
@Entity
@Table(name="USER", schema="test")
public class User implements Serializable
{
...
Je ne comprend pas pourquoi. J'ai pas envie de forcer le schéma lors de déclaration de la table ...
y a un truc que j'ai raté ?[/quote]