java hibernate使用注解来定义联合主键

时间:2021-12-23 01:40:50

java  hibernate使用注解来定义联合主键

下面使用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