2

私の Entity クラスには、次のような列があります。

@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 に変換されます。

テーブル アドオンを作成します (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 
4

2 に答える 2

2

問題はありませんinteger。問題はcreateステートメントにあります。ご覧のとおり、create ステートメントorderの列は、Mysql の予約語でorder integer not null,...ある asを使用して作成されます。ORDER

注釈を使用している場合、解決策は

@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>
于 2015-07-20T20:23:47.487 に答える
0

あなたのアプリケーションは、を使用するように正しく構成されていないようMySQLDialectです。Hibernate を適切に構成する方法は、実行している環境によって異なります。そのため、適切なドキュメントを参照してください。

これの出発点は、スタック オーバーフローの質問「データ ソースの SQL 方言を構成する必要があるのはなぜですか?」である可能性があります。

于 2015-07-20T20:16:15.573 に答える