hibernate继承映射
以下测试是在mysql中进行的。
1、单表方式
Animal.java
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="animalType")
@DiscriminatorValue("animal")
public class Animal {
private int id;
private String name;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Cat.java
@Entity
@DiscriminatorValue("cat")
public class Cat extends Animal {
private String catName;
public String getCatName() {
return catName;
}
public void setCatName(String catName) {
this.catName = catName;
}
}
Dog.java
@Entity
@DiscriminatorValue(value="dog")
public class Dog extends Animal{
private String dogName;
public String getDogName() {
return dogName;
}
public void setDogName(String dogName) {
this.dogName = dogName;
}
}
TestJunit.java
@Test
public void testAnimal(){
Animal t = new Animal();
t.setName("animal");
session.saveOrUpdate(t);
}
@Test
public void testCat(){
Cat t = new Cat();
t.setName("cat");
t.setCatName("cat");
session.saveOrUpdate(t);
}
@Test
public void testDog(){
Dog t = new Dog();
t.setName("dog");
t.setDogName("dog");
session.saveOrUpdate(t);
}
对应生成的数据表是这样的
table---animal
id | name | animalType | catName | dogName |
1 | animal | animal | null | null |
2 | cat | cat | cat | null |
3 | dog | dog | null | dog |
2、join方式
Animal.java
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public class Animal {
private int id;
private String name;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Cat.java
@Entity
@PrimaryKeyJoinColumn(name="catId")
public class Cat extends Animal {
private String catName;
public String getCatName() {
return catName;
}
public void setCatName(String catName) {
this.catName = catName;
}
}
Dog.java
@Entity
@PrimaryKeyJoinColumn(name="dogId")
public class Dog extends Animal{
private String dogName;
public String getDogName() {
return dogName;
}
public void setDogName(String dogName) {
this.dogName = dogName;
}
}
TestJunit.java
@Test
public void testAnimal(){
Animal t = new Animal();
t.setName("animal");
session.saveOrUpdate(t);
}
@Test
public void testCat(){
Cat t = new Cat();
t.setName("cat");
t.setCatName("cat");
session.saveOrUpdate(t);
}
@Test
public void testDog(){
Dog t = new Dog();
t.setName("dog");
t.setDogName("dog");
session.saveOrUpdate(t);
}
对应生成的数据表是这样的
table---Animal
table---cat
table---dog
3、每个实体类对应一个数据表
以下的测试中,Anamal.java中的主键生成策略需要注解成@GeneratedValue(strategy=GenerationType.TABLE),测试是在mysql数据库中进行的。
Animal.java
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class Animal {
private int id;
private String name;
@Id
@GeneratedValue(strategy=GenerationType.TABLE)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Cat.java
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class Cat extends Animal {
private String catName;
public String getCatName() {
return catName;
}
public void setCatName(String catName) {
this.catName = catName;
}
}
Dog.java
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class Dog extends Animal{
private String dogName;
public String getDogName() {
return dogName;
}
public void setDogName(String dogName) {
this.dogName = dogName;
}
}
TestJunit.java
@Test
public void testAnimal(){
Animal t = new Animal();
t.setName("animal");
session.saveOrUpdate(t);
}
@Test
public void testCat(){
Cat t = new Cat();
t.setName("cat");
t.setCatName("cat");
session.saveOrUpdate(t);
}
@Test
public void testDog(){
Dog t = new Dog();
t.setName("dog");
t.setDogName("dog");
session.saveOrUpdate(t);
}
对应生成的数据表是这样的
table---animal
table---cat
table---dog
分享到:
相关推荐
标题 "spring-jpa(hibernate实现)环境搭建" 涉及到的是在Java开发中使用Spring Data JPA和Hibernate来构建数据访问层的过程。Spring Data JPA是Spring框架的一部分,它提供了一种简化的方式来操作数据库,而...
只需提供一个继承自JpaRepository的接口,即可自动实现基本的查询方法。此外,Spring Data JPA还支持自定义查询,允许开发者使用@Query注解编写JPQL语句。 Hibernate作为JPA的实现,是一个强大的对象关系映射(ORM...
例如,创建一个`UserRepository`,继承自`JpaRepository, Long>`: ```java public interface UserRepository extends JpaRepository, Long> { } ``` 现在,你可以通过这个接口进行增删改查操作,如`save()`、`...
5. **配置Hibernate**:在Spring配置中启用JPA和Hibernate,例如在Spring Boot中,可以通过`@EnableJpaRepositories`注解启用JPA仓库,`@EntityScan`注解扫描实体类。 6. **使用Repository**:在服务层或控制器中...
**hibernate+jpa注解实现最简单的增删改查** 在Java开发中,Hibernate和JPA(Java Persistence API)是两种广泛使用的对象关系映射(ORM)框架,它们简化了与数据库交互的过程,使开发者可以使用面向对象的方式来...
我们可以创建一个接口,继承自`JpaRepository`,并提供泛型参数,分别代表实体类和主键类型。这样,我们就可以无需编写任何DAO层代码,直接使用接口中的方法进行CRUD操作。 5. **Service层**: 为了遵循分层架构,...
在Repository接口中,可以使用JPA的Query注解或继承JpaRepository接口,实现对数据库的CRUD操作。 此外,Spring还提供了事务管理功能,可以通过@Transactional注解在方法级别声明事务,Spring会自动处理事务的开启...
JPA 使用 Hibernate 作为实现方式JPA + Hibernate + MySQL in Spring Boot注意此项目使用spring-boot 1.4.0版本,不适用于spring-boot 2.0 版本;...利用jpa的注解特性与Hibernate结合,在数据存储的时
在Java开发中,数据持久化是一个关键环节,而Java Persistence API (JPA) 和 Hibernate 是常用的ORM(对象关系映射)框架,它们简化了数据库操作。这篇文章将深入探讨如何使用JPA与Hibernate实现CRUD(创建、读取、...
标题 "Spring2.5 + JPA(Hibernate)实现" 指的是在Spring框架的2.5版本中集成Java Persistence API (JPA),并利用Hibernate作为JPA的实现。这通常是为了在一个基于Spring的应用程序中实现数据持久化,提供一个灵活、...
5. 创建Repository:定义接口继承自JPA提供的CrudRepository或JpaRepository,用于数据的CRUD操作。 6. 配置事务管理:Spring的声明式事务管理可以利用AOP来管理事务边界。 通过以上步骤,你可以实现Spring 2.5与...
5. **Repository接口**: 创建一个接口继承`JpaRepository`,无需编写任何方法,Spring Boot会自动生成CRUD操作。 ```java import org.springframework.data.jpa.repository.JpaRepository; public interface ...
使用Hibernate注解时,需要确保JPA的API(如`javax.persistence.*`)和Hibernate的实现(如`org.hibernate.annotations.*`)都已引入。开发中,通过注解定义实体类和关系,然后通过SessionFactory和Session进行CRUD...
最后,创建一个继承自`JpaRepository`的接口,以便于操作`User`实体: ```java import org.springframework.data.jpa.repository.JpaRepository; public interface UserRepository extends JpaRepository, Long> {...
例如,你可以创建一个`@Entity`注解的实体类,表示数据库表,然后创建一个`@Repository`接口,该接口继承自JpaRepository,自动提供了CRUD操作。 现在,我们要把Hibernate作为JPA的提供者。Hibernate具有强大的ORM...
- **扩展注解**:除了标准的 JPA 注解外,Hibernate 还提供了一些额外的注解来增强功能,例如: - **@Entity**:用于标记实体类。 - **@Identifier**:用于定义标识符生成策略。 - **@Property**:用于指定属性...
通过阅读和理解JPA的源码,以及使用相关工具,如Hibernate作为JPA的实现,可以帮助你更好地理解和解决问题。 总结来说,JPA提供的继承机制使得我们能够优雅地在数据库层面上实现类的继承关系,提高了代码的可读性...
在Java Persistence API (JPA)中,`@Query`注解是用于自定义查询的一种方式,它可以让我们在Repository接口中直接编写SQL或者HQL(Hibernate Query Language)来执行数据库操作。在本例中,我们将详细探讨如何使用`@...