初识联合主键
最近一直在接触联合主键,虽然数据库和model类以及hibernate映射文件都不是自己做的,但一直在用,不了解点肯定是不行的。
首先模拟个有联合主键的表
表 CLASSES(班级表)
列为
grade_Id int //年级号
class_id int //班级号
student_count int //学生人数
就这三个列吧,懒着写了。
其中grade_Id与class_id为该表的联合主键
主键是用来标示表中的每一条数据的,该表如果不加个其他的列(没有业务,就是单纯为了做主键而加的列)的话,只有用联合主键了。
下面谈下在hibernate中的配置。
首先定义model,联合主键需要定义两个(其中一个表示联合主键)
下面代码只为表达意思,一律简写。(只写表达意思的)
Class ClaId{
private long gradeId
private long classId;
}
Class Classes{
private ClasId id;
private long studentCount;
}
数据类型用long是因为long好拼……
下面看下联合主键在映射文件中的配法
(还是只配一个映射文件就好,不是说两个model就得两个映射文件.,…..)
Hibernate对于Classes这个model的映射文件中主键的配置
<composite-id name="id" class="com.hitrust.factoring.model.ClaId">
<key-property name="classId" type="long">
<column name="SELLER_OID" />
</key-property>
<key-property name="gradeId" type="long">
<column name="UPDATE_DATETIME" />
</key-property>
</composite-id>
下面说的与本文无关,可以选读。
在我们的项目中,model的类一般不直接用,而是这样
例如表classes 对应 的model 为 BaseClasses
而项目中我们会另外写一个Classes类继承自BaseClasses,用的时候就用Classes,
而不直接用BaseClasses,在Classes类中可能会定义一些额外的字段,不是数据表里的列,是用来处理做额外的逻辑。
对于表之间的关联关系,什么多对一多对多什么的,在我们的项目里几乎没有配。原因我想可能有两个。一是业务过于复杂了,如果配关联的话肯定会乱成一团糟,再一个原因就是逻辑也不太符合(例如不是包含于被包含关系,配成多对一好像说不过去……)。肯定不能都配关联。
那在做查询的时候,可能会比较麻烦点,就得自己做多表连查了。说道多表联查,就不的不提,对于联合主键的表之间的联查,需要加上所有的关联条件,有时候不会只有一个关联条件。(这算是对hibernate多表联查那片博文的补充吧)
最后再加个疑问,对于那些继承了java.io.Serializable接口的类,很多时候会有个private static final long serialVersionUID = 1L;
这个serialVersionUID要怎么设置????我一般都是直接给它赋值为1L,谁知道该怎么处理的请留言,详细一点,谢谢。