gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:57:02 24 4
gpt4 key购买 nike

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

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

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

最佳答案

假设您在“组织”和“Activity ”之间具有外键关系,则必须首先创建父行,然后创建具有父 ID 的子行。

你可以用 spring 来做到这一点,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()
}

关于java - 如何通过 JDBC 实现持久化相关(级联)对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19571703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com