JPA联合主键的使用(@EmbeddedId+@Embeddable)

来源:互联网 发布:利用淘宝赚钱灰色项目 编辑:程序博客网 时间:2024/04/27 14:17
  • 在用户角色权限设计中,我们使用复合主键来来保证唯一性

1.数据库
  1. CREATE TABLE `sys_role_detail` (
  2. `roleid` int(11) DEFAULT NULL COMMENT '角色id',
  3. `menuid` int(11) DEFAULT NULL COMMENT '菜单id',
  4. `orgcode` varchar(20) DEFAULT NULL
  5. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.实体类的联合主键
  1. 联合主键满足条件:
  2. 必须实现Serializable
  3. 必须有默认的 public无参数的构造方法、必须覆盖 equals hashCode 方法,这些要求与使用复合主键的要求相同
  4. 将嵌入式主键类使用 @Embeddable 标注,表示这个是一个嵌入式类。
  1. package com.datalook.model;
  2. import javax.persistence.Column;
  3. import javax.persistence.Embeddable;
  4. /**
  5. * SysRoleDetailId entity.
  6. */
  7. @SuppressWarnings("serial")
  8. @Embeddable
  9. public class SysRoleDetailId implements java.io.Serializable {
  10. // Fields
  11. private Integer roleid;
  12. private Integer menuid;
  13. // Constructors
  14. /** default constructor */
  15. public SysRoleDetailId() {
  16. }
  17. /** full constructor */
  18. public SysRoleDetailId(Integer roleid, Integer menuid) {
  19. this.roleid = roleid;
  20. this.menuid = menuid;
  21. }
  22. // Property accessors
  23. @Column(name = "roleid")
  24. public Integer getRoleid() {
  25. return this.roleid;
  26. }
  27. public void setRoleid(Integer roleid) {
  28. this.roleid = roleid;
  29. }
  30. @Column(name = "menuid")
  31. public Integer getMenuid() {
  32. return this.menuid;
  33. }
  34. public void setMenuid(Integer menuid) {
  35. this.menuid = menuid;
  36. }
  37. public boolean equals(Object other) {
  38. if ((this == other))
  39. return true;
  40. if ((other == null))
  41. return false;
  42. if (!(other instanceof SysRoleDetailId))
  43. return false;
  44. SysRoleDetailId castOther = (SysRoleDetailId) other;
  45. return ((this.getRoleid() == castOther.getRoleid()) || (this
  46. .getRoleid() != null
  47. && castOther.getRoleid() != null && this.getRoleid().equals(
  48. castOther.getRoleid())))
  49. && ((this.getMenuid() == castOther.getMenuid()) || (this
  50. .getMenuid() != null
  51. && castOther.getMenuid() != null && this.getMenuid()
  52. .equals(castOther.getMenuid())));
  53. }
  54. public int hashCode() {
  55. int result = 17;
  56. result = 37 * result
  57. + (getRoleid() == null ? 0 : this.getRoleid().hashCode());
  58. result = 37 * result
  59. + (getMenuid() == null ? 0 : this.getMenuid().hashCode());
  60. return result;
  61. }
  62. @Override
  63. public String toString() {
  64. return "SysRoleDetailId [roleid=" + roleid + ", menuid=" + menuid + "]";
  65. }
  66. }


3.实体
  1. @EmbeddedId和@AttributeOverrides 属性映射
  1. package com.datalook.model;
  2. import java.sql.Timestamp;
  3. import javax.persistence.AttributeOverride;
  4. import javax.persistence.AttributeOverrides;
  5. import javax.persistence.Column;
  6. import javax.persistence.EmbeddedId;
  7. import javax.persistence.Entity;
  8. import javax.persistence.Table;
  9. import javax.persistence.Transient;
  10. import com.newcapec.model.AbstractDataLookModel;
  11. /**
  12. * SysRoleDetail entity. @author MyEclipse Persistence Tools
  13. */
  14. @Entity
  15. @Table(name = "sys_role_detail")
  16. public class SysRoleDetail extends AbstractDataLookModel {
  17.     
  18. // Constructors
  19. /** default constructor */
  20. public SysRoleDetail() {
  21. }
  22. /** constructor */
  23. public SysRoleDetail(SysRoleDetailId sysRoleDetailId) {
  24. this.sysRoleDetailId = sysRoleDetailId;
  25. }
  26. private static final long serialVersionUID = -4244160679944459020L;
  27. private SysRoleDetailId sysRoleDetailId;
  28. private String orgcode;
  29. // Property accessors
  30. @Column(name = "orgcode", length = 32)
  31. public String getOrgcode() {
  32. return this.orgcode;
  33. }
  34. public void setOrgcode(String orgcode) {
  35. this.orgcode = orgcode;
  36. }
  37. @EmbeddedId
  38. @AttributeOverrides( {
  39. @AttributeOverride(name = "roleid", column = @Column(name = "roleid")),
  40. @AttributeOverride(name = "menuid", column = @Column(name = "menuid")) })
  41. public SysRoleDetailId getSysRoleDetailId() {
  42. return this.sysRoleDetailId;
  43. }
  44. public void setSysRoleDetailId(SysRoleDetailId sysRoleDetailId) {
  45. this.sysRoleDetailId = sysRoleDetailId;
  46. }
  47. @Override
  48. public String toString() {
  49. return "SysRoleDetail [sysRoleDetailId=" + sysRoleDetailId + ", orgcode=" + orgcode + "]";
  50. }
  51. }