假設組織和活動之間有外鍵關係,則必須先創建父項,然後使用父級ID創建子行。
你可以用彈簧,here's舊的文章做到這一點,但校長保持不變。
要手動實現,數據庫必須提供一種機制,通過該機制可以爲給定表生成主鍵,而無需先創建行。 Oracle支持sequence.nextVal,所以你的數據庫應該支持類似的東西。
我是僞編碼這一點,你可以填補空白:
try{
connection.setAutoCommit(false)
//get organisation id first
String nextOrgIdSql = "select orgSeq.nextval from someVirtualTable" //depends on database
ResultSet orgIdRs = statement.executeQuery(nextOrgIdSql)
int orgId = -1
if(orgIdRs.next())
orgId = orgIdRs.getInt(1)
//create organisation first
String orgSql =
"Insert into ORGANISATION (ORGID, ...) values ("+ orgId + ",...)"
//create activities
for(Activity activity : organisation.getActivityList()){
String nextActvIdSql = "select activitySeq.nextval from someVirtualTable"
ResultSet actvIdRs = statement.executeQuery(nextActvIdSql)
int actvId = -1
if(actIdRs.next())
actvId = actvIdRs.getInt(1)
statement.execute(
"Insert INTO ACTIVITY (ACTVID, ORGID) values ("+actvId+","+orgId+")"
}
connection.commit()
}catch(SQLException e){
connection.rollback()
}
那你試試?通常你只需遍歷你的'Collection's並通過你自己實現的JDBC-方法來保存它們。 (例如在您的數據訪問對象中) – Zhedar
什麼數據庫?你可以使用spring,還是隻使用純JDBC? – raffian