`
heshifk
  • 浏览: 12461 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

hibernate 注解方式实现联合主键

阅读更多

联合主键的实现方式有三种

方式1.将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,再将该类注解为@Embeddable,最后在主类中(该类不包含联合主键类中的字段)保存该联合主键类的一个引用,并生成set和get方法,并将该引用注解为@Id

 

@Embeddable
public class DogPrimarykey implements Serializable {

	private static final long serialVersionUID = 2555027553374060423L;

	private String id;
	@Column(name="DOG_NAME")
	private String name;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		DogPrimarykey other = (DogPrimarykey) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}

}

 

@Entity(name = "DOG")
public class Dog {
	private static final long serialVersionUID = 7219216851705947642L;
	@Id
	private DogPrimarykey dogPrimarykey;

	@Column(name = "DOG_AGE", length = 2)
	private int age;

	public DogPrimarykey getDogPrimarykey() {
		return dogPrimarykey;
	}

	public void setDogPrimarykey(DogPrimarykey dogPrimarykey) {
		this.dogPrimarykey = dogPrimarykey;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		if (age > 100 || age < 1) {
			this.age = 1;
		} else {
			this.age = age;
		}
	}

	public void say() {
		// TODO Auto-generated method stub
		System.out.println("汪  汪  汪");
	}

	@Override
	public String toString() {
		return "Dog [dogPrimarykey=" + dogPrimarykey + ", age=" + age + "]";
	}

}

 方式2:将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,最后在主类中(该类不包含联合主键类中的字段)保存该联合主键类的一个引用,并生成set和get方法,并将该引用注解为@EmbeddedId

 

public class DogPrimarykey implements Serializable {

	private static final long serialVersionUID = 2555027553374060423L;

	private String id;
	@Column(name="DOG_NAME")
	private String name;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		DogPrimarykey other = (DogPrimarykey) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
}

 

@Entity(name = "DOG")
public class Dog {
	private static final long serialVersionUID = 7219216851705947642L;
	@EmbeddedId
	private DogPrimarykey dogPrimarykey;

	@Column(name = "DOG_AGE", length = 2)
	private int age;

	public DogPrimarykey getDogPrimarykey() {
		return dogPrimarykey;
	}

	public void setDogPrimarykey(DogPrimarykey dogPrimarykey) {
		this.dogPrimarykey = dogPrimarykey;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		if (age > 100 || age < 1) {
			this.age = 1;
		} else {
			this.age = age;
		}
	}

	public void say() {
		// TODO Auto-generated method stub
		System.out.println("汪  汪  汪");
	}

	@Override
	public String toString() {
		return "Dog [dogPrimarykey=" + dogPrimarykey + ", age=" + age + "]";
	}

}

 方式3:将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并要重写equals和hashcode.最后在主类中(该类包含联合主键类中的字段)将联合主键字段都注解为@Id,并在该类上方加上这样的注解:@IdClass(联合主键类.class)

public class DogPrimarykey implements Serializable {

	private static final long serialVersionUID = 2555027553374060423L;

	private String id;
	@Column(name="DOG_NAME")
	private String name;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		DogPrimarykey other = (DogPrimarykey) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
}

 

@Entity(name = "DOG")
@IdClass(DogPrimarykey.class)
public class Dog {
	private static final long serialVersionUID = 7219216851705947642L;

	@Id
	private String id;
	@Id
	private String name;
	@Column(name = "DOG_AGE", length = 2)
	private int age;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		if (age > 100 || age < 1) {
			this.age = 1;
		} else {
			this.age = age;
		}
	}

	public void say() {
		// TODO Auto-generated method stub
		System.out.println("汪  汪  汪");
	}

	@Override
	public String toString() {
		return "Dog [id=" + id + ", name=" + name + ", age=" + age + "]";
	}
}

 

分享到:
评论

相关推荐

    Hibernate注解映射联合主键

    在Hibernate中,有三种主要的注解方式来映射联合主键,以下是对这三种方式的详细解释: 1. **使用`@Embeddable`和`@Id`** 在这种映射方式中,联合主键的字段被放在一个单独的类中,这个类需要实现`java.io....

    JPA注解实现联合主键

    这种方式不仅简化了联合主键的实现过程,还提高了代码的可读性和维护性。对于需要使用联合主键的场景来说,这是一种非常实用的方法。在实际开发中,还可以根据具体需求调整复合主键类的属性数量以及类型,以适应不同...

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

    本文将详细介绍如何使用Hibernate注解来定义联合主键。 首先,我们需要了解联合主键的定义方式。在Hibernate API中,有三种方法来定义联合主键: 1. 使用`@Embeddable`注解定义一个独立的主键类,然后将这个类的...

    Hibernate联合主键的例子

    在本教程中,我们将通过一个具体的MyEclipse例子来探讨如何在Hibernate中实现联合主键。 首先,我们需要理解联合主键的基本概念。联合主键由两个或多个列组成,这些列的值组合起来在表中必须是唯一的。这种设计模式...

    Hibernate注解jar包

    使用Hibernate注解时,需要确保JPA的API(如`javax.persistence.*`)和Hibernate的实现(如`org.hibernate.annotations.*`)都已引入。开发中,通过注解定义实体类和关系,然后通过SessionFactory和Session进行CRUD...

    Hibernate注解方式、HQL查询

    一、Hibernate注解方式 1. **实体类注解**:在Hibernate中,我们可以使用注解来定义一个Java类为数据库中的表。例如,使用`@Entity`标记一个类为实体,`@Table`指定对应的数据库表名,`@Id`定义主键,`@...

    hibernate注解详解说明

    Hibernate 提供了多种继承映射策略,如 `@Inheritance(strategy=InheritanceType.SINGLE_TABLE)`、`@DiscriminatorColumn` 和 `@DiscriminatorValue`,以支持单表继承、子类表和联合主键等。 #### 映射关联关系 - ...

    hibernate复合主键配置和使用

    在Hibernate中,我们可以通过`@Embeddable`和`@EmbeddedId`注解来实现复合主键的配置。 1. 创建复合主键类 首先,我们需要创建一个表示复合主键的类,该类需要被`@Embeddable`注解标记。例如,假设我们有用户地址...

    Hibernate教程08_关系映射之联合主键

    在Hibernate中,实现联合主键可以通过使用`@Embeddable`和`@EmbeddedId`注解。首先,我们需要创建一个包含所有主键字段的类,并使用`@Embeddable`标记。这个类通常会作为其他实体类的属性,用`@EmbeddedId`注解。...

    hibernate注解中英文版

    Hibernate注解是元数据的一种形式,它们允许我们在Java类和属性上直接声明关于如何映射到数据库的信息,避免了XML配置文件的繁琐。通过注解,我们可以指定实体类、属性、关联关系等如何对应到数据库表和字段。 二、...

    Hibernate一对一单向外键关联 (联合主键annotation)

    通过这种方式,你可以实现Hibernate中一对一单向外键关联及联合主键的配置。这使得两个实体间的关系更加明确,同时也方便了数据的管理和操作。在实际项目中,这样的设计可以提高数据的完整性和一致性。

    hibernate复合主键的实例

    本实例将深入探讨如何在Hibernate中实现复合主键,并提供一个具体的示例来帮助理解。 一、什么是复合主键? 在数据库设计中,主键是用于唯一标识表中每一行的字段或字段组合。当一个表的主键由两个或更多个字段...

    Hibernate中对数据库复合主键的支持.pdf

    这可以通过在`hibernate.cfg.xml`或实体类的注解中定义主键策略来实现。以注解为例,可以使用`@EmbeddedId`注解来指定一个复合主键: ```java import javax.persistence.EmbeddedId; import javax.persistence....

    hibernate复合主键映射

    在Hibernate中,我们可以通过实现`Serializable`接口并使用`@Embeddable`和`@EmbeddedId`注解来创建一个复合主键类。 例如,假设我们有一个`Order`实体,其中包含`customerId`和`orderId`两个字段作为复合主键。...

    Hibernate 系列教程 单向一对多

    在Java开发领域,Hibernate是一个非常重要的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据。本教程聚焦于Hibernate中的单向一对多关联映射,这是一个常见的实体关系...

    hibernate中文帮助文档

    Hibernate 是一个流行的对象...总的来说,这个中文帮助文档详尽地阐述了使用Hibernate注解进行数据库映射的各种细节,对于理解和使用Hibernate进行Java开发非常有帮助。无论是新手还是经验丰富的开发者,都能从中受益。

    SSH2+JSO与三表联合主外键

    同时,Hibernate的Criteria API或HQL(Hibernate Query Language)可以帮助进行复杂的数据库查询,包括涉及多表连接的查询,这些查询可能涉及到联合主键和外键的使用。 综上所述,SSH2+JSON的结合提供了强大的后端...

    Hibernate面试题专栏 - 最全的Hibernate面试题, Hibernate笔试题, Hibernate问题

    - 联合主键是多个字段共同构成的主键,可以通过@EmbeddedId和@Embeddable注解实现。 - 复合主键是自动生成的主键,通过@TableGenerator或@IdClass实现。 **8. 异常处理** - Hibernate提供了自己的异常体系,如...

    EJB3.0-JPA实体的注解规范以及Hibernate特有的扩展

    ### EJB3.0-JPA实体的注解规范以及Hibernate特有的扩展 #### 一、概述 EJB3.0引入了一种新的编程模型,它基于Java Persistence API (JPA),使得开发人员能够更加轻松地创建企业级应用。JPA允许使用POJO(Plain Old...

Global site tag (gtag.js) - Google Analytics