Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何通过JDBC实现持久化相关(级联)对象_Java_Jpa_Jdbc - Fatal编程技术网

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

Java 如何通过JDBC实现持久化相关(级联)对象,java,jpa,jdbc,Java,Jpa,Jdbc,我有由父实体组成的相关对象,如Organization.java,它具有对象类型的子属性,如@OneToMany列表,如活动(即列表ActivityList)(Activity.java有自己的对象类型属性) 使用JPA持久性在数据库上执行这些对象的CRUD操作非常容易,但我目前的需求禁止我使用JPA,并且只使用JDBC实现相同的功能,我不确定如何实现 当第一次创建父对象和子对象时(即所有对象都有空id),如何通过JDBC实现相同的功能?假设组织和活动之间存在外键关系,则必须先创建父对象,然后创

我有由父实体组成的相关对象,如Organization.java,它具有对象类型的子属性,如@OneToMany列表,如活动(即列表ActivityList)(Activity.java有自己的对象类型属性)

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


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

假设组织和活动之间存在外键关系,则必须先创建父对象,然后创建具有父id的子行

您可以使用spring(一篇旧文章)来实现这一点,但其原理保持不变

要手动实现,您的数据库必须提供一种机制,通过该机制可以为给定表生成主键,而无需先创建行。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()
}

您尝试了什么?通常您只需迭代您的
集合
并通过您自己实现的JDBC方法保存它们(例如,在您的数据访问对象中)什么数据库?您可以使用spring,还是必须只使用纯JDBC?