2012-03-14 61 views
0

通常我們在Hibernate中用c#(流利休眠)ID.(x=>x.Column).Generatedby.Sequence("blabla");流利的hibernate - 由queryresult生成?

它有可能使「通過查詢生成」的東西?我的意思是我可以指定查詢或存儲過程以獲得序列中的結果?

我需要這樣做,因爲:

IDvarchar。當我通過"generatedby.sequence("sequence"); "生成時,收到有關整型的錯誤,當然是正確的。

所以我寫了一個函數來解決這個問題。在哪裏我將ID值的過程作爲varchar (xxx0001,xxxx0002.......)自動遞增。這很好。

現在我需要將該結果(的函數)分配給映射類中的ID。

有辦法做到這一點嗎?放的 "SELECT GenerateSequencesAccountsr('SEQ_TEST',1) AS NextValue FROM dual"結果我的「ID(X => x.account)????。

我已經在考慮在一個可能的解決方案來調用查詢之前插入,但我試圖保持。我的 「基地」 總喜歡通用:

 public virtual void SaveData(object cls) 
     { 
      using (var session = SessionFactory.OpenSession()) 
      { 
       using (var tx = session.BeginTransaction()) 
       { 

        session.SaveOrUpdate(cls); 
        tx.Commit(); 
       } 
      } 
     } 

任何想法

回答

0
class MyCustomSqlGenerator : IPersistentIdentifierGenerator 
{ 
    private SqlString _sql = new SqlString("your select here"); 

    public string GeneratorKey() 
    { 
     return _sql.ToString(); 
    } 

    public string[] SqlCreateStrings(Dialect dialect) 
    { 
     // TODO: return sql Create of sqlfunction 
    } 

    public string[] SqlDropString(Dialect dialect) 
    { 
     // TODO: return sql DROP of sqlfunction 
    } 

    public object Generate(ISessionImplementor session, object obj) 
    { 
     try 
     { 
      IDbCommand cmd = session.Batcher.PrepareCommand(CommandType.Text, _sql, SqlTypeFactory.NoTypes); 
      IDataReader reader = null; 
      try 
      { 
       reader = session.Batcher.ExecuteReader(cmd); 
       try 
       { 
        reader.Read(); 
        object result = IdentifierGeneratorFactory.Get(reader, NHibernateUtil.String, session); 
        return result; 
       } 
       finally 
       { 
        reader.Close(); 
       } 
      } 
      finally 
      { 
       session.Batcher.CloseCommand(cmd, reader); 
      } 
     } 
     catch (DbException sqle) 
     { 
      throw ADOExceptionHelper.Convert(session.Factory.SQLExceptionConverter, sqle, "could not get next sequence value"); 
     } 
    } 
} 
相關問題