hibernate持久化对象数据更新问题

时间:2021-03-10 20:39:15
一个持久化类包含另一个持久化类的对象,这两个分别mapping到两张表

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,外键关联!

#6


如果映射配置文件不能改呢?
是不是只能通过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

#8


cascade="save-update"

#9


cascade可取以下值:
“none”: 做任何操作都不影响附属对象
“save-update”:级联保存或修改
“delete”:级联删除
“delete-orphan”:级联删除并从缓存中清除附属对象
“all”:级联保存、修改、删除

#10


我试过save-update, all好像都不能达到目的

需求是查询数据库获得Db1对象的时候能得到Db2对象
Db1的property,也就是跟数据库的column一一对应的那些字段能正确得到,是另外的持久化类对象(通过外键关联)时,该对象的各个属性均为null,也就是没有更新。。

#11


把你更新的代码发上来看看
casecade="all"可以解决以上问题,如果不能就是配置或者代码实现还存在问题

#12


��Ҫ��ʵ���Դ�������
db1 = session.get(db1.clazz, id);

Ȼ����Է���db2û�еõ���Ӧ������

#13


你是说获取对象db1时候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,外键关联!

#6


如果映射配置文件不能改呢?
是不是只能通过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

#8


cascade="save-update"

#9


cascade可取以下值:
“none”: 做任何操作都不影响附属对象
“save-update”:级联保存或修改
“delete”:级联删除
“delete-orphan”:级联删除并从缓存中清除附属对象
“all”:级联保存、修改、删除

#10


我试过save-update, all好像都不能达到目的

需求是查询数据库获得Db1对象的时候能得到Db2对象
Db1的property,也就是跟数据库的column一一对应的那些字段能正确得到,是另外的持久化类对象(通过外键关联)时,该对象的各个属性均为null,也就是没有更新。。

#11


把你更新的代码发上来看看
casecade="all"可以解决以上问题,如果不能就是配置或者代码实现还存在问题

#12


��Ҫ��ʵ���Դ�������
db1 = session.get(db1.clazz, id);

Ȼ����Է���db2û�еõ���Ӧ������

#13


你是说获取对象db1时候db2属性没有获取到?


1 把db1里面的db2属性的lazy设置成false

2 通常不建议1的做法,所以最好不用get,用hql写,然后用fetch 关联db2

#14


casecade="all"能够解决,我做了个部门-用户的项目,用的就是这个,但是需要外键关联