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

网友投稿 266 2023-06-17


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

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

下面使用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、主键类必须fQMgnlkTo要重写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;

}

}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Tomcat Cannot assign requested address: JVM_Bind 非端口占用冲突
下一篇:利用Thumbnailator轻松实现图片缩放、旋转与加水印
相关文章

 发表评论

暂时没有评论,来抢沙发吧~