首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过JDBC实现持久化相关(级联)对象

如何通过JDBC实现持久化相关(级联)对象
EN

Stack Overflow用户
提问于 2013-10-24 16:38:20
回答 1查看 978关注 0票数 1

我有由父实体(如Organisation.java )组成的相关对象,它具有对象类型的子属性,如@OneToMany列表(如List activitiyList) (Activiy.java有自己的对象类型属性)。

使用JPA持久性在数据库上对这些对象执行CRUD操作非常容易,但我目前的要求禁止我使用JPA,并且仅使用JDBC实现相同的功能,我不知道如何实现。

当第一次创建父对象和子对象(即所有对象都具有空ID)时,如何通过JDBC实现相同的功能?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-25 17:09:57

假设组织和活动之间有外键关系,则必须先创建父项,然后创建带有父id的子行。

您可以使用spring来完成这一任务,下面是是一个旧的帖子,但是主体保持不变。

要手动实现,数据库必须提供为给定表生成主键的机制,而不必先创建行。Oracle支持sequence.nextVal,因此您的数据库应该支持类似的内容。

我在做伪编码,你可以填空:

代码语言:javascript
复制
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()
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19571703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档