2012-03-22 7 views
0

私のクラスは正しくマップされているようです(オブジェクトが存続しようとするとDBにテーブルが作成されていれば)私は、新しく作成されたインスタンスをDBに永続化させることはできません。Hibernateエンティティは永続化されていませんが、テーブルとクエリを作成することができます

私はコンソールでshow SQLクエリを持っており、それがINSERTクエリを生成していないが、(最大)を選択しようとしているIDは、その後

誰かが私はなぜ把握助けてくださいもらえますか?

SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); 
     Session session = sessionFactory.openSession(); 
     User myUser = new User(); 
     myUser.setUserId("Acccc"); 
     myUser.setPassword("abc"); 
     session.save(myUser); 

とクラス:

@Entity 
@Table(name = "users") 
@SuppressWarnings("serial") 
public class User implements Serializable 
{ 
    //Properties 
    @Id 
    @Column 
    private int id; 
    @Column 
    private String userId; 
    @Column 
    private String password; 

    //Getters 
    public int getId() { return id; } 
    public String getUserId() { return userId; } 
    public String getPassword() { return password; } 

    //Setters 
    public void setId(int id) { this.id = id; } 
    public void setUserId(String userId) { this.userId = userId; } 
    public void setPassword(String password) { this.password = password; } 
} 

と設定:

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
<class name="nz.co.genesis.healthsafety.stripes.model.User" table="users"> 
    <id name="id" type="int" column="id" > 
    </id> 
    <property name="userId" type="java.lang.String" column="userId" not-null="false" length="45" /> 
    <property name="password" type="java.lang.String" column="password" not-null="false" length="45" /> 
</class> 
</hibernate-mapping> 

そしてDB:

id : PK NN AI 
userId varchar45, default NULL 
password varchar45, default: null 
+0

は整数 –

+0

ラッパークラスにintを変更してみてください、あなたは、トランザクションをコミットしていますか? –

+0

どのようにトランザクションをコミットするのですか?私は.save()がそれをしたと思った? – Baconbeastnz

答えて

0

私は取引休止状態

のあなたの構成を考えていません
+0

申し訳ありませんJelly?説明していただけますか? :) – Baconbeastnz

1

これはテストのために私のコードでモデルを休止状態

public static void main(String[] args) { 
    Properties props = new Properties(); 
    props.setProperty("hibernate.dialect", "org.hibernate.dialect.SQLServerDialect"); 
    props.setProperty("hibernate.connection.driver_class", "com.microsoft.jdbc.sqlserver.SQLServerDriver"); 
    props.setProperty("hibernate.connection.url", "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=databaseName"); 
    props.setProperty("hibernate.connection.username", "username"); 
    props.setProperty("hibernate.connection.password", "password"); 

    props.setProperty("hibernate.show_sql", "true"); 
    props.setProperty("hibernate.transaction.flush_before_completion", "true"); 
    props.setProperty("hibernate.connection.release_mode", "auto"); 
    props.setProperty("hibernate.transaction.auto_close_session", "true"); 
    Configuration cfg = new Configuration(); 
    cfg.setProperties(props); 

    // add dependency table class 
    cfg.addClass(ComputerModel.class); 
    cfg.addClass(CpuModel.class);  
    cfg.addClass(CdRomModel.class); 
    cfg.addClass(BrandModel.class); 

    SessionFactory sessions = cfg.buildSessionFactory(); 
    Session ss = sessions.openSession(); 
    List<ComputerModel> list = (ss.createQuery("from ComputerModel ")).list(); 

    System.out.println("Found : " + list.size() + " items."); 
    System.out.println("======================================"); 
    for (int i = 0; i < list.size(); i++) { 
     ComputerModel result = (ComputerModel) list.get(i); 
     System.out.println("computerSerialNo: " + result.getComputerSerialNo() + 
          ", " + result.getCpuModel()); 
    } 

    ss.close(); 
    sessions.close(); 
} 
+0

すごいよ!ありがとうございました。しかし、自動コミットモードにも依存していますか? – Baconbeastnz

関連する問題