我在主表A 增加数据,B子表也要跟着增加相应的数据,子表B也有外键关系 ,关联C表,用SSH做,不知道该如何做,这问题困扰了许久,昨晚3点睡觉都没搞定,好失望,希望你能帮助下我。谢谢了!
表结构:A:主表
create table A --用户信息
(
A_ID NUMBER not null,
A_NAME VARCHAR2(20) not null,
A_PASSWORD VARCHAR2(20) not null,
A_STATUS NUMBER(6) not null,
A_VERSION NUMBER(10) not null
);
B 表:子表
create table B
(
B_ID NUMBER(10) not null,
C_ID NUMBER(10) not null, --关联 C 的外键字段
A_ID NUMBER not null --关联 A 的外键字段
);C 表:主表
create table C
(
C_ID NUMBER(10) not null,
C_TITLE VARCHAR2(200) not null,
C_TYPE NUMBER(6) not null
);
表结构:A:主表
create table A --用户信息
(
A_ID NUMBER not null,
A_NAME VARCHAR2(20) not null,
A_PASSWORD VARCHAR2(20) not null,
A_STATUS NUMBER(6) not null,
A_VERSION NUMBER(10) not null
);
B 表:子表
create table B
(
B_ID NUMBER(10) not null,
C_ID NUMBER(10) not null, --关联 C 的外键字段
A_ID NUMBER not null --关联 A 的外键字段
);C 表:主表
create table C
(
C_ID NUMBER(10) not null,
C_TITLE VARCHAR2(200) not null,
C_TYPE NUMBER(6) not null
);
然后就用hibernate 生成隐射文件啊 然后设置隐射关系同样的B C 一步步来
建议用JPA简单一点
create table C
(
C_ID NUMBER(10) not null,
B_ID VARCHAR2(200) not null,
A_ID NUMBER(6) not null
);
A类中有Set<B> bs = new HashSet<B>();
1.你想在添加A的时候自动添加B,需要给bs属性上添加一个级联保存cascade属性。
2.由于多的一端也就是B是关系的维护端,当你用bs.add(new B())时不行,此时B是不知道A的存在的
所以建议在A类中自己写个辅助方法列如:
public void addB(B b) {
bs.add(b);
b.setA(this);//B类中肯定有维护关系的属性假设是A a;a这个,这句是让B端知道A的存在便于更新外键维护2着的关系
}
这样当你用session.save(a)时就会将所有对应的b保存进去了,
3.测试阶段:用junit
@Test
public void save() {
C c = new C();
c.setxx//设置c的其他属性
session.save(c);//先要保存c让其处于持久状态 B b1 = new B();
B B2 = new B();
A a = new A();
a.setxx//设置a的其他属性
b1.setC(c);//设置B与C关系
b2.setC(c);//设置B与C关系 a.addB(b1);
a.addB(b2);
session.save(a);//这样当保存a的时候会保存b,通过b会去更新与c之间的外键来维护b和c之间的关系
}
上面的都是伪代码,我这里都没测试过不知道是不是对的,按我的理解应该是没问题的,如果有什么问题我在去测试看看