0

[ Hibernate Schema Export in Eclipse で、今日の以前の私の関連する、しかし明確な質問を見ると役立つかもしれません。]

次のJavaクラスがあります

package com.examscam.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

@Entity
public class User {
    private Long id;
    private String password;

    @Id
    @GeneratedValue
    public Long getId() {
        return id;
    }

    public String getPassword() {
        return password;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public static void main(String[] args) {
        AnnotationConfiguration config = new AnnotationConfiguration();
        config.addAnnotatedClass(User.class);
        config.configure();
//      new SchemaExport(config).create(true, true);

        SessionFactory factory = config.buildSessionFactory();
        Session session = factory.getCurrentSession();
        session.beginTransaction();

        User u = new User();        
        u.setPassword("abc123");

        session.saveOrUpdate(u);
        session.getTransaction().commit();

        System.out.println("Done.");
    }
}

(MySQL)データベースがあり、コードでユーザーテーブルを作成しました

create table User (id integer not null auto_increment, password varchar(255), primary key (id))

ただし、このコードを実行しようとすると、次のスタック トレースが表示されます。

Exception in thread "main" java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    at java.lang.Integer.parseInt(Integer.java:470)
    at java.lang.Integer.valueOf(Integer.java:554)
    at org.hibernate.util.PropertiesHelper.getInteger(PropertiesHelper.java:37)
    at org.hibernate.connection.DriverManagerConnectionProvider.configure(DriverManagerConnectionProvider.java:47)
    at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:124)
    at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:56)
    at org.hibernate.cfg.SettingsFactory.createConnectionProvider(SettingsFactory.java:414)
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:62)
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2009)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292)
    at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)
    at com.examscam.model.User.main(User.java:40)

User クラスの 40 行目は

    SessionFactory factory = config.buildSessionFactory();

なぜこれが起こっているのか誰にも分かりますか?その行のどこにも空の文字列を入力しておらず、本からコードを正確にコピーしました。この本が正しいことに疑いの余地はありません。私の質問は、「この動作が発生する理由 (xml ファイルのエラー、クラスパスの順序付けの問題、ファイルが正しいディレクトリにないなど) を考えられる人はいますか?」という行に沿ったものです。

この質問への回答は、このページの一番上にあるスキーマのエクスポートに関するリンクの問題の解決にも役立つ場合があります。

ありがとう、コナー。

4

2 に答える 2

0

データベース ID 列のデータ型は整数ですが、エンティティ クラスの ID データ型が長いため、これが問題かどうかはわかりません。ただし、エンティティの id のデータ型を int に変更してみる価値はあります。

于 2013-05-09T17:42:14.990 に答える