下面使用hibernate的API中说明的三种方式来定义主键,主要使用Annotation来定义hibernate中的联合主键
下面取至hibernate的API文档:
定义组合主键的几种语法:
1、将组件类注解为@Embeddable,并将组件的属性注解为@Id
2、将组件的属性注解为@EmbeddedId
3、将类注解为@IdClass,并将该实体中所有属于主键的属性都注解为@Id
下面就分别使用这三种方式来定义联合主键。
建表的SQL语句:
1
2
3
4
5
6
7
8
9
|
CREATE TABLE `syslogs` (
`id` varchar (50) NOT NULL ,
`yhid` varchar (50) NOT NULL ,
`modelname` varchar (100) DEFAULT NULL ,
`content` varchar (500) DEFAULT NULL ,
`inserttime` varchar (20) DEFAULT NULL ,
`remark` varchar (50) DEFAULT NULL ,
PRIMARY KEY (`id`,`yhid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf-8;
|
一、将组件类注解为@Embeddable
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
/**
* SysLogsDtoId代表主键类
*/
package com.hibernate.dto;
import javax.persistence.Embeddable;
/**
* 1、主键类必须要实现java.io.Serializable接口
* 2、主键类必须要重写equals和hashCode方法
* @author ibm
*/
@Embeddable
public class SysLogsDtoId implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private String id;
private String yhid;
public SysLogsDtoId() {
}
public SysLogsDtoId(String id, String yhid) {
this .id = id;
this .yhid = yhid;
}
public String getId() {
return this .id;
}
public void setId(String id) {
this .id = id;
}
public String getYhid() {
return this .yhid;
}
public void setYhid(String yhid) {
this .yhid = yhid;
}
public boolean equals(Object other) {
if (( this == other))
return true ;
if ((other == null ))
return false ;
if (!(other instanceof SysLogsDtoId))
return false ;
SysLogsDtoId castOther = (SysLogsDtoId) other;
return (( this .getId() == castOther.getId()) || ( this .getId() != null && castOther.getId() != null && this .getId().equals(castOther.getId())))
&& (( this .getYhid() == castOther.getYhid()) || ( this .getYhid() != null && castOther.getYhid() != null && this .getYhid().equals(
castOther.getYhid())));
}
public int hashCode() {
int result = 17 ;
result = 37 * result + (getId() == null ? 0 : this .getId().hashCode());
result = 37 * result + (getYhid() == null ? 0 : this .getYhid().hashCode());
return result;
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
/**
* SysLogsDto为表对象映射类,其中主键为主键类SysLogsDtoId
*/
package com.hibernate.dto;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table (name = "syslogs" )
public class SysLogsDto implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private SysLogsDtoId id;
private String modelname;
private String content;
private String inserttime;
private String remark;
public SysLogsDto() {
}
public SysLogsDto(SysLogsDtoId id) {
this .id = id;
}
public SysLogsDto(SysLogsDtoId id, String modelname, String content, String inserttime, String remark) {
this .id = id;
this .modelname = modelname;
this .content = content;
this .inserttime = inserttime;
this .remark = remark;
}
@Id
public SysLogsDtoId getId() {
return this .id;
}
public void setId(SysLogsDtoId id) {
this .id = id;
}
@Column (name = "modelname" , length = 100 )
public String getModelname() {
return this .modelname;
}
public void setModelname(String modelname) {
this .modelname = modelname;
}
@Column (name = "content" , length = 500 )
public String getContent() {
return this .content;
}
public void setContent(String content) {
this .content = content;
}
@Column (name = "inserttime" , length = 20 )
public String getInserttime() {
return this .inserttime;
}
public void setInserttime(String inserttime) {
this .inserttime = inserttime;
}
@Column (name = "remark" , length = 50 )
public String getRemark() {
return this .remark;
}
public void setRemark(String remark) {
this .remark = remark;
}
}
|
二、将组件的属性注解为@EmbeddedId
这种情况最简单,主键类只用定义主键字段,不需要写任何注解。然后在对象类中在主键类的get方法上加上@EmbeddedId注解。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
/**
* SysLogsDtoId代表主键类
*/
package com.hibernate.dto;
public class SysLogsDtoId implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private String id;
private String yhid;
public SysLogsDtoId() {
}
public SysLogsDtoId(String id, String yhid) {
this .id = id;
this .yhid = yhid;
}
public String getId() {
return this .id;
}
public void setId(String id) {
this .id = id;
}
public String getYhid() {
return this .yhid;
}
public void setYhid(String yhid) {
this .yhid = yhid;
}
public boolean equals(Object other) {
if (( this == other))
return true ;
if ((other == null ))
return false ;
if (!(other instanceof SysLogsDtoId))
return false ;
SysLogsDtoId castOther = (SysLogsDtoId) other;
return (( this .getId() == castOther.getId()) || ( this .getId() != null && castOther.getId() != null && this .getId().equals(castOther.getId())))
&& (( this .getYhid() == castOther.getYhid()) || ( this .getYhid() != null && castOther.getYhid() != null && this .getYhid().equals(
castOther.getYhid())));
}
public int hashCode() {
int result = 17 ;
result = 37 * result + (getId() == null ? 0 : this .getId().hashCode());
result = 37 * result + (getYhid() == null ? 0 : this .getYhid().hashCode());
return result;
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
/**
* SysLogsDto为表对象映射类,其中主键为主键类SysLogsDtoId
*/
package com.hibernate.dto;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Table;
@Entity
@Table (name = "syslogs" )
public class SysLogsDto implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private SysLogsDtoId id;
private String modelname;
private String content;
private String inserttime;
private String remark;
public SysLogsDto() {
}
public SysLogsDto(SysLogsDtoId id) {
this .id = id;
}
public SysLogsDto(SysLogsDtoId id, String modelname, String content, String inserttime, String remark) {
this .id = id;
this .modelname = modelname;
this .content = content;
this .inserttime = inserttime;
this .remark = remark;
}
@EmbeddedId
public SysLogsDtoId getId() {
return this .id;
}
public void setId(SysLogsDtoId id) {
this .id = id;
}
@Column (name = "modelname" , length = 100 )
public String getModelname() {
return this .modelname;
}
public void setModelname(String modelname) {
this .modelname = modelname;
}
@Column (name = "content" , length = 500 )
public String getContent() {
return this .content;
}
public void setContent(String content) {
this .content = content;
}
@Column (name = "inserttime" , length = 20 )
public String getInserttime() {
return this .inserttime;
}
public void setInserttime(String inserttime) {
this .inserttime = inserttime;
}
@Column (name = "remark" , length = 50 )
public String getRemark() {
return this .remark;
}
public void setRemark(String remark) {
this .remark = remark;
}
}
|
三、将类注解为@IdClass,并将该实体中所有属于主键的属性都注解为@Id
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
/**
* SysLogsDtoId代表主键类
*/
package com.hibernate.dto;
public class SysLogsDtoId implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private String id;
private String yhid;
public SysLogsDtoId() {
}
public SysLogsDtoId(String id, String yhid) {
this .id = id;
this .yhid = yhid;
}
public String getId() {
return this .id;
}
public void setId(String id) {
this .id = id;
}
public String getYhid() {
return this .yhid;
}
public void setYhid(String yhid) {
this .yhid = yhid;
}
public boolean equals(Object other) {
if (( this == other))
return true ;
if ((other == null ))
return false ;
if (!(other instanceof SysLogsDtoId))
return false ;
SysLogsDtoId castOther = (SysLogsDtoId) other;
return (( this .getId() == castOther.getId()) || ( this .getId() != null && castOther.getId() != null && this .getId().equals(castOther.getId())))
&& (( this .getYhid() == castOther.getYhid()) || ( this .getYhid() != null && castOther.getYhid() != null && this .getYhid().equals(
castOther.getYhid())));
}
public int hashCode() {
int result = 17 ;
result = 37 * result + (getId() == null ? 0 : this .getId().hashCode());
result = 37 * result + (getYhid() == null ? 0 : this .getYhid().hashCode());
return result;
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
/**
* SysLogsDto为表对象映射类,其中主键为主键类SysLogsDtoId
*/
package com.hibernate.dto;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.Table;
@Entity
@Table (name = "syslogs" )
@IdClass (value=SysLogsDtoId. class )
public class SysLogsDto implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private String id;
private String yhid;
private String modelname;
private String content;
private String inserttime;
private String remark;
public SysLogsDto() {
}
@Id
public String getId() {
return id;
}
public void setId(String id) {
this .id = id;
}
@Id
public String getYhid() {
return yhid;
}
public void setYhid(String yhid) {
this .yhid = yhid;
}
@Column (name = "modelname" , length = 100 )
public String getModelname() {
return this .modelname;
}
public void setModelname(String modelname) {
this .modelname = modelname;
}
@Column (name = "content" , length = 500 )
public String getContent() {
return this .content;
}
public void setContent(String content) {
this .content = content;
}
@Column (name = "inserttime" , length = 20 )
public String getInserttime() {
return this .inserttime;
}
public void setInserttime(String inserttime) {
this .inserttime = inserttime;
}
@Column (name = "remark" , length = 50 )
public String getRemark() {
return this .remark;
}
public void setRemark(String remark) {
this .remark = remark;
}
}
|
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
原文链接:http://blog.csdn.net/wyc_cs/article/details/9031991