假设组织和活动之间有外键关系,则必须先创建父项,然后使用父级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