hibernate 的联合主键怎么设置?inverse 设置成 false 对 sql 语句有什么影响?
首先需要建立一个主键类:
public class SCMapping implements Serializable{
private Integer sno; //学号
private Integer cno; //课程号
private Integer grade; //成绩
}
使用映射文件映射联合主键时,持久化类必须满足三个条件:
1.实现 java.io.Serializable 接口;
2.覆盖 hashCode()方法;
3.覆盖 equals()方法。
接着写映射文件:
<hibernate-mapping auto-import="falst">
<class name="com.tarena.SCMapping" table="scmapping"
catalog="joblog">
<composite-id>
<key-property name="sno" type="integer">
<column name="Sno" />
</key-property>
<key-property name="cno" type="integer">
<column name="Cno" />
</key-property>
</composite-id>
<property name="grade" type="integer">
<column name="Grede"/>
</property>
</class>
</hibernate-mapping>
然后调用 Hibernae Api 测试。
关于 inverse 设置成 false 对 sql 语句有什么影响:
inverse 属性默认是 false,就是说关系的两端都来维护关系:比如 Student 和 Teacher 是
多对多关系,用一个中间表 TeacherStudent 维护。如果 Student 这边 inverse="true",
那 么 关 系 由 另 一 端 Teacher 维 护 , 就 是 说 当 插 入 Student 时 , 不 会 操 作
TeacherStudent 表(中间表)。只有 Teacher 插入或删除时才会触发对中间表的操作。
所以两边都 inverse="true"是不对的,会导致任何操作都不触发对中间表的影响;当两
边都 inverse="false" 或默认时,会导致在中间表中插入两次关系。