使用注解来定义联合主键

下面使用hibernate的API中说明的三种方式来定义主键,主要使用Annotation来定义hibernate中的联合主键

下面取至hibernate的API文档:

定义组合主键的几种语法:

1、将组件类注解为@Embeddable,并将组件的属性注解为@Id

2、将组件的属性注解为@EmbeddedId

3、将类注解为@IdClass,并将该实体中所有属于主键的属性都注解为@Id

下面就分别使用这三种方式来定义联合主键。

建表的SQL语句:

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

/**
 * 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;
	}

}

/**
 * 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注解。

/**
 * 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;
	}

}


/**
 * 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

/**
 * 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;
	}

}

/**
 * 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://www.16boke.com


你可能感兴趣的:(常用框架,JAVA开发笔记)