联合主键的实现方式有三种
方式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中,有三种主要的注解方式来映射联合主键,以下是对这三种方式的详细解释: 1. **使用`@Embeddable`和`@Id`** 在这种映射方式中,联合主键的字段被放在一个单独的类中,这个类需要实现`java.io....
这种方式不仅简化了联合主键的实现过程,还提高了代码的可读性和维护性。对于需要使用联合主键的场景来说,这是一种非常实用的方法。在实际开发中,还可以根据具体需求调整复合主键类的属性数量以及类型,以适应不同...
本文将详细介绍如何使用Hibernate注解来定义联合主键。 首先,我们需要了解联合主键的定义方式。在Hibernate API中,有三种方法来定义联合主键: 1. 使用`@Embeddable`注解定义一个独立的主键类,然后将这个类的...
在本教程中,我们将通过一个具体的MyEclipse例子来探讨如何在Hibernate中实现联合主键。 首先,我们需要理解联合主键的基本概念。联合主键由两个或多个列组成,这些列的值组合起来在表中必须是唯一的。这种设计模式...
使用Hibernate注解时,需要确保JPA的API(如`javax.persistence.*`)和Hibernate的实现(如`org.hibernate.annotations.*`)都已引入。开发中,通过注解定义实体类和关系,然后通过SessionFactory和Session进行CRUD...
一、Hibernate注解方式 1. **实体类注解**:在Hibernate中,我们可以使用注解来定义一个Java类为数据库中的表。例如,使用`@Entity`标记一个类为实体,`@Table`指定对应的数据库表名,`@Id`定义主键,`@...
Hibernate 提供了多种继承映射策略,如 `@Inheritance(strategy=InheritanceType.SINGLE_TABLE)`、`@DiscriminatorColumn` 和 `@DiscriminatorValue`,以支持单表继承、子类表和联合主键等。 #### 映射关联关系 - ...
在Hibernate中,我们可以通过`@Embeddable`和`@EmbeddedId`注解来实现复合主键的配置。 1. 创建复合主键类 首先,我们需要创建一个表示复合主键的类,该类需要被`@Embeddable`注解标记。例如,假设我们有用户地址...
在Hibernate中,实现联合主键可以通过使用`@Embeddable`和`@EmbeddedId`注解。首先,我们需要创建一个包含所有主键字段的类,并使用`@Embeddable`标记。这个类通常会作为其他实体类的属性,用`@EmbeddedId`注解。...
Hibernate注解是元数据的一种形式,它们允许我们在Java类和属性上直接声明关于如何映射到数据库的信息,避免了XML配置文件的繁琐。通过注解,我们可以指定实体类、属性、关联关系等如何对应到数据库表和字段。 二、...
通过这种方式,你可以实现Hibernate中一对一单向外键关联及联合主键的配置。这使得两个实体间的关系更加明确,同时也方便了数据的管理和操作。在实际项目中,这样的设计可以提高数据的完整性和一致性。
本实例将深入探讨如何在Hibernate中实现复合主键,并提供一个具体的示例来帮助理解。 一、什么是复合主键? 在数据库设计中,主键是用于唯一标识表中每一行的字段或字段组合。当一个表的主键由两个或更多个字段...
这可以通过在`hibernate.cfg.xml`或实体类的注解中定义主键策略来实现。以注解为例,可以使用`@EmbeddedId`注解来指定一个复合主键: ```java import javax.persistence.EmbeddedId; import javax.persistence....
在Hibernate中,我们可以通过实现`Serializable`接口并使用`@Embeddable`和`@EmbeddedId`注解来创建一个复合主键类。 例如,假设我们有一个`Order`实体,其中包含`customerId`和`orderId`两个字段作为复合主键。...
在Java开发领域,Hibernate是一个非常重要的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据。本教程聚焦于Hibernate中的单向一对多关联映射,这是一个常见的实体关系...
Hibernate 是一个流行的对象...总的来说,这个中文帮助文档详尽地阐述了使用Hibernate注解进行数据库映射的各种细节,对于理解和使用Hibernate进行Java开发非常有帮助。无论是新手还是经验丰富的开发者,都能从中受益。
同时,Hibernate的Criteria API或HQL(Hibernate Query Language)可以帮助进行复杂的数据库查询,包括涉及多表连接的查询,这些查询可能涉及到联合主键和外键的使用。 综上所述,SSH2+JSON的结合提供了强大的后端...
- 联合主键是多个字段共同构成的主键,可以通过@EmbeddedId和@Embeddable注解实现。 - 复合主键是自动生成的主键,通过@TableGenerator或@IdClass实现。 **8. 异常处理** - Hibernate提供了自己的异常体系,如...
### EJB3.0-JPA实体的注解规范以及Hibernate特有的扩展 #### 一、概述 EJB3.0引入了一种新的编程模型,它基于Java Persistence API (JPA),使得开发人员能够更加轻松地创建企业级应用。JPA允许使用POJO(Plain Old...