hibernate many-to-one left join fetch 对应的many表数据在one表不存在
hibernatemany-to-oneleftjoinfetch对应的many表数据在one表不存在。比如,A表引用B表,但是A表中的引用在B表中不存在,hiberna...
hibernate many-to-one left join fetch 对应的many表数据在one表不存在。
比如,A表引用B表,但是A表中的引用在B表中不存在,hibernate配置文件中A-B是MANY-TO-ONE关系,这样会多生成几条sql。数目正好是A表中存在的B表中已删除的数据数目。请问该如何解决? 展开
比如,A表引用B表,但是A表中的引用在B表中不存在,hibernate配置文件中A-B是MANY-TO-ONE关系,这样会多生成几条sql。数目正好是A表中存在的B表中已删除的数据数目。请问该如何解决? 展开
1个回答
展开全部
class A{
private Long id;
private B b;
}
class B{
private Long id;
...
}
<class name="A">
<id...>
<property...>
<many-to-one class="B" column="B_ID" name="b">
</class>
<class name="B">
<id...property...>
</class>
保存时,先保存one 方,再保存many方。假如先保存many方再保存one方,就会有额外的upodate
sql ,因为后保存one方,many方对应的one方的属性的状态发生变化,他会发额外的update A
set B_ID = ? 来维护自己的属性。
假如是单向的one2many
class A{
private Long id;
..
}
class B{
private Set<A> as;
}
<class name="A">
<id ...>
</class>
<class name="B">
<set name="as">
<kye column="A_ID"/>
<one-to-many class="A" >
</set>
</class>
双向的one2many 需要在one 方的集合属性上加上insvere=true 放弃对关系的维护,从而提性能
<set name="as" insverse="true">
<kye column="A_ID"/>
<one-to-many class="A" >
</set>
private Long id;
private B b;
}
class B{
private Long id;
...
}
<class name="A">
<id...>
<property...>
<many-to-one class="B" column="B_ID" name="b">
</class>
<class name="B">
<id...property...>
</class>
保存时,先保存one 方,再保存many方。假如先保存many方再保存one方,就会有额外的upodate
sql ,因为后保存one方,many方对应的one方的属性的状态发生变化,他会发额外的update A
set B_ID = ? 来维护自己的属性。
假如是单向的one2many
class A{
private Long id;
..
}
class B{
private Set<A> as;
}
<class name="A">
<id ...>
</class>
<class name="B">
<set name="as">
<kye column="A_ID"/>
<one-to-many class="A" >
</set>
</class>
双向的one2many 需要在one 方的集合属性上加上insvere=true 放弃对关系的维护,从而提性能
<set name="as" insverse="true">
<kye column="A_ID"/>
<one-to-many class="A" >
</set>
追答
能把你的配置 xxx.hbml.xml 配置 和 domain类
给我看看吗,
在 主表的 对象的hbml 配置 中加入 cascade="all-delete-orphan", 不清楚你可以去百度 查查cascade 的使用方法。也可以通过 在 主对象的dao 的delete方法中,删除该学生记录的 同时,查出该学生ID 对应的成绩记录,打破他们这件的关系 并删除。这不难吧。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询