2012-03-22 26 views
0

我的類似乎被正確映射(如果我嘗試持久化一個對象,它會在數據庫中創建表(如果它缺少)),我可以成功查詢,但我無法將新創建的實例持久保存到數據庫中。Hibernate實體沒有被保存,但可以創建表和查詢

我在控制檯顯示SQL查詢,並且它不產生插入查詢,但它試圖選擇(最大)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

代碼嘗試更改的int的包裝類整數 – 2012-03-22 05:26:13

+0

你提交事務? – 2012-03-22 07:03:37

+0

如何確認交易?我以爲.save()做到了? – Baconbeastnz 2012-03-22 20:39:46

回答

0

我不認爲你的交易休眠

的配置
+0

對不起果凍?你能解釋一下嗎? :) – Baconbeastnz 2012-03-22 07:02:56

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

太好了!謝謝。依靠自動comit模式呢? – Baconbeastnz 2012-03-22 21:25:50

相關問題