class Db1{
//...
Db2 db2;
//...
}
class Db2{
//...
}
通过调用session.get(Db1.class, id)进行数据更新发现, db2对象的各个field都为null
请问怎样才能让db2的数据也能更新?
还是只能通过session.get(Db2.class, id2)这样的方法手动更新?
14 个解决方案
#1
可以为db1 和db2做关联,在配置中做关联映射,使casecade=update
#2
好像update是unsupported?
#3
db1和db2建立一对一或者多对一关联.在db1的xml文件里设置级联更新casecade=update
#4
hibernate里支持级联更新(删除)
#5
楼上正解!用casecade
另外不建议你这样写:
可以直接放个id,外键关联!
另外不建议你这样写:
可以直接放个id,外键关联!
#6
如果映射配置文件不能改呢?
是不是只能通过id再进行session.get呢?
是不是只能通过id再进行session.get呢?
#7
<many-to-one name="cases" column="CASEID"
class="CaseDb"
cascade="update" not-null="true" />
-------------------
调试报错
org.hibernate.MappingException: Unsupported cascade style: update
class="CaseDb"
cascade="update" not-null="true" />
-------------------
调试报错
org.hibernate.MappingException: Unsupported cascade style: update
#8
cascade="save-update"
#9
cascade可取以下值:
“none”: 做任何操作都不影响附属对象
“save-update”:级联保存或修改
“delete”:级联删除
“delete-orphan”:级联删除并从缓存中清除附属对象
“all”:级联保存、修改、删除
“none”: 做任何操作都不影响附属对象
“save-update”:级联保存或修改
“delete”:级联删除
“delete-orphan”:级联删除并从缓存中清除附属对象
“all”:级联保存、修改、删除
#10
我试过save-update, all好像都不能达到目的
需求是查询数据库获得Db1对象的时候能得到Db2对象
Db1的property,也就是跟数据库的column一一对应的那些字段能正确得到,是另外的持久化类对象(通过外键关联)时,该对象的各个属性均为null,也就是没有更新。。
需求是查询数据库获得Db1对象的时候能得到Db2对象
Db1的property,也就是跟数据库的column一一对应的那些字段能正确得到,是另外的持久化类对象(通过外键关联)时,该对象的各个属性均为null,也就是没有更新。。
#11
把你更新的代码发上来看看
casecade="all"可以解决以上问题,如果不能就是配置或者代码实现还存在问题
casecade="all"可以解决以上问题,如果不能就是配置或者代码实现还存在问题
#12
��Ҫ��ʵ���Դ�������
db1 = session.get(db1.clazz, id);
Ȼ����Է���db2û�еõ���Ӧ������
db1 = session.get(db1.clazz, id);
Ȼ����Է���db2û�еõ���Ӧ������
#13
你是说获取对象db1时候db2属性没有获取到?
1 把db1里面的db2属性的lazy设置成false
2 通常不建议1的做法,所以最好不用get,用hql写,然后用fetch 关联db2
1 把db1里面的db2属性的lazy设置成false
2 通常不建议1的做法,所以最好不用get,用hql写,然后用fetch 关联db2
#14
casecade="all"能够解决,我做了个部门-用户的项目,用的就是这个,但是需要外键关联
#1
可以为db1 和db2做关联,在配置中做关联映射,使casecade=update
#2
好像update是unsupported?
#3
db1和db2建立一对一或者多对一关联.在db1的xml文件里设置级联更新casecade=update
#4
hibernate里支持级联更新(删除)
#5
楼上正解!用casecade
另外不建议你这样写:
可以直接放个id,外键关联!
另外不建议你这样写:
可以直接放个id,外键关联!
#6
如果映射配置文件不能改呢?
是不是只能通过id再进行session.get呢?
是不是只能通过id再进行session.get呢?
#7
<many-to-one name="cases" column="CASEID"
class="CaseDb"
cascade="update" not-null="true" />
-------------------
调试报错
org.hibernate.MappingException: Unsupported cascade style: update
class="CaseDb"
cascade="update" not-null="true" />
-------------------
调试报错
org.hibernate.MappingException: Unsupported cascade style: update
#8
cascade="save-update"
#9
cascade可取以下值:
“none”: 做任何操作都不影响附属对象
“save-update”:级联保存或修改
“delete”:级联删除
“delete-orphan”:级联删除并从缓存中清除附属对象
“all”:级联保存、修改、删除
“none”: 做任何操作都不影响附属对象
“save-update”:级联保存或修改
“delete”:级联删除
“delete-orphan”:级联删除并从缓存中清除附属对象
“all”:级联保存、修改、删除
#10
我试过save-update, all好像都不能达到目的
需求是查询数据库获得Db1对象的时候能得到Db2对象
Db1的property,也就是跟数据库的column一一对应的那些字段能正确得到,是另外的持久化类对象(通过外键关联)时,该对象的各个属性均为null,也就是没有更新。。
需求是查询数据库获得Db1对象的时候能得到Db2对象
Db1的property,也就是跟数据库的column一一对应的那些字段能正确得到,是另外的持久化类对象(通过外键关联)时,该对象的各个属性均为null,也就是没有更新。。
#11
把你更新的代码发上来看看
casecade="all"可以解决以上问题,如果不能就是配置或者代码实现还存在问题
casecade="all"可以解决以上问题,如果不能就是配置或者代码实现还存在问题
#12
��Ҫ��ʵ���Դ�������
db1 = session.get(db1.clazz, id);
Ȼ����Է���db2û�еõ���Ӧ������
db1 = session.get(db1.clazz, id);
Ȼ����Է���db2û�еõ���Ӧ������
#13
你是说获取对象db1时候db2属性没有获取到?
1 把db1里面的db2属性的lazy设置成false
2 通常不建议1的做法,所以最好不用get,用hql写,然后用fetch 关联db2
1 把db1里面的db2属性的lazy设置成false
2 通常不建议1的做法,所以最好不用get,用hql写,然后用fetch 关联db2
#14
casecade="all"能够解决,我做了个部门-用户的项目,用的就是这个,但是需要外键关联