Hibernate 将 java int 转换为 mysql 整数
Hibernate converting java int to mysql integer
我的实体 class 有一个看起来像这样的列:
@Entity
@Table(name = "addons")
public class AddonsEntity {
private int id;
private String name;
private BigDecimal price;
private int addonGroupId;
private int order;
private AddonGroupsEntity addonGroupsByAddonGroupId;
@Id
@Column(name = "id", nullable = false, insertable = true, updatable = true)
@GeneratedValue(generator="increment") @GenericGenerator(name="increment", strategy="increment")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
这转换为 sql 如:
创建table addons (id integer not null, ....);
由于 mysql 中没有类似于整数的东西,因此会引发错误。
版本:
'org.hibernate', name: 'hibernate-core', version: '4.3.10.Final'
'org.hibernate', name: 'hibernate-c3p0', version: '4.3.10.Final'
'mysql', name: 'mysql-connector-java', version: '5.1.35'
Mysql Server version: 5.6.25 Homebrew
Java 1.8
SQL 翻译:
create table addons (
id integer not null,
addon_group_id integer not null,
name varchar(200) not null,
order integer not null,
price decimal(2,0) not null,
addonGroupsByAddonGroupId_id integer not null,
primary key (id)
)
错误:
2015-07-21 01:26:13 [] ERROR [Scanner-1] o.h.t.h.SchemaExport [SchemaExport.java:426] HHH000389: Unsuccessful: create table addons (id integer not null, addon_group_id integer not null, name varchar(200) not null, order integer not null, price decimal(2,0) not null, addonGroupsByAddonGroupId_id integer not null, primary key (id))
2015-07-21 01:26:13 [] ERROR [Scanner-1] o.h.t.h.SchemaExport [SchemaExport.java:427] You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order integer not null,price decimal(2,0) not null,addonGroups' at line 5
在我看来,您的应用程序未正确配置为使用 MySQLDialect
。如何正确配置 Hibernate 取决于您在其中执行它的环境,因此请查看适当的文档。
这可能是 Stack Overflow 问题“Why do I need to configure the SQL dialect of a data source?”
的起点
问题不在于 integer
。问题出在创建语句中。正如您在 create 语句中所见,order
列是使用 order integer not null,...
创建的,其中 ORDER
是 Mysql 中的保留字。
如果你使用注解,解决方案是
@Column(name = "[ORDER]", nullable = false)
public int getOrder() {
return this.order;
}
或
@Column(name = '"ORDER"', nullable = false)
public int getOrder() {
return this.order;
}
如果你使用的是hbm文件,解决办法是:
<property name="order">
<column name="[ORDER]" not-null="true" />
</property>
或
<property name="order">
<column name='"ORDER"' length="255" not-null="true" />
</property>
我的实体 class 有一个看起来像这样的列:
@Entity
@Table(name = "addons")
public class AddonsEntity {
private int id;
private String name;
private BigDecimal price;
private int addonGroupId;
private int order;
private AddonGroupsEntity addonGroupsByAddonGroupId;
@Id
@Column(name = "id", nullable = false, insertable = true, updatable = true)
@GeneratedValue(generator="increment") @GenericGenerator(name="increment", strategy="increment")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
这转换为 sql 如:
创建table addons (id integer not null, ....);
由于 mysql 中没有类似于整数的东西,因此会引发错误。
版本:
'org.hibernate', name: 'hibernate-core', version: '4.3.10.Final'
'org.hibernate', name: 'hibernate-c3p0', version: '4.3.10.Final'
'mysql', name: 'mysql-connector-java', version: '5.1.35'
Mysql Server version: 5.6.25 Homebrew
Java 1.8
SQL 翻译:
create table addons (
id integer not null,
addon_group_id integer not null,
name varchar(200) not null,
order integer not null,
price decimal(2,0) not null,
addonGroupsByAddonGroupId_id integer not null,
primary key (id)
)
错误:
2015-07-21 01:26:13 [] ERROR [Scanner-1] o.h.t.h.SchemaExport [SchemaExport.java:426] HHH000389: Unsuccessful: create table addons (id integer not null, addon_group_id integer not null, name varchar(200) not null, order integer not null, price decimal(2,0) not null, addonGroupsByAddonGroupId_id integer not null, primary key (id))
2015-07-21 01:26:13 [] ERROR [Scanner-1] o.h.t.h.SchemaExport [SchemaExport.java:427] You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order integer not null,price decimal(2,0) not null,addonGroups' at line 5
在我看来,您的应用程序未正确配置为使用 MySQLDialect
。如何正确配置 Hibernate 取决于您在其中执行它的环境,因此请查看适当的文档。
这可能是 Stack Overflow 问题“Why do I need to configure the SQL dialect of a data source?”
的起点问题不在于 integer
。问题出在创建语句中。正如您在 create 语句中所见,order
列是使用 order integer not null,...
创建的,其中 ORDER
是 Mysql 中的保留字。
如果你使用注解,解决方案是
@Column(name = "[ORDER]", nullable = false)
public int getOrder() {
return this.order;
}
或
@Column(name = '"ORDER"', nullable = false)
public int getOrder() {
return this.order;
}
如果你使用的是hbm文件,解决办法是:
<property name="order">
<column name="[ORDER]" not-null="true" />
</property>
或
<property name="order">
<column name='"ORDER"' length="255" not-null="true" />
</property>