我正在開票系統,具有用於多個subsidaries其中每個都有自己的一套發票編號的支持,因此我有(附屬的主鍵的表,InvoiceNo )替代最大值(ID)在複雜的主鍵
我不能使用MySQL自動遞增場,因爲那將是不斷遞增的所有subsidaries相同的計數。
我不想做單獨的表制定的附屬公司會有新的subsidaries添加需要的話......
我目前使用的「選擇MAX(ID)凡附屬= X」,從我的表格,並根據此添加發票。
我使用NHibernate和發票插入,來了InvoiceItem插入之前,因此,如果發票插入失敗,InvoiceItem將無法進行。但是,我會抓住例外,重新檢索最大(ID),然後再試一次。
這種方法有什麼問題?如果有的話,什麼是替代方案?
的要求振振有辭是因爲我讀了這個問題的答案之一:Nhibernate Criteria: 'select max(id)'
這看起來像我正在尋找的東西,你能否清理鎖定過程多一點。我需要從發票中選擇哪個子公司= x進行更新,然後在同一個會話上進行另一個查詢以獲取最大ID? – 2010-11-05 11:37:32
你需要一張桌子'補貼',你每個補貼有一行。這將是你鎖定的那一行,以表明專職操作正在進行。 'START TRANSACTION',然後'SELECT id FROM subsuary where''' FOR UPDATE',然後'SELECT MAX(id)FROM invoice ...','INSERT ...','COMMIT'。 – 2010-11-05 13:29:56
所以,當你在子公司表鎖排輔助它不會讓任何新的記錄被插入具有此行作爲一個外鍵約束?那是對的嗎? – 2010-11-05 13:48:19