`
cjnetwork
  • 浏览: 178841 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

jpa/hibernate继承注解

阅读更多
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
idnameanimalTypecatNamedogName
1animalanimalnullnull
2catcatcatnull
3dogdognulldog


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
idname
1animal
2cat
3dog


table---cat
catIdcatName
2cat


table---dog
dogIddogName
3dog



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
idname
1animal


table---cat
idnamecatName
2catcat


table---dog
idnamedogName
3dogdog




分享到:
评论
8 楼 cjnetwork 2014-11-17  
aaaaaaaaad
7 楼 cjnetwork 2014-11-16  
实得分实得分实得分
6 楼 cjnetwork 2014-11-16  
aaaaaaaaad
5 楼 cjnetwork 2014-11-16  
aaaaaaaaa
4 楼 cjnetwork 2014-11-16  
实得分算法实得分
3 楼 cjnetwork 2014-11-16  
哈哈 实得分实得分
2 楼 cndavy 2014-09-24  
      good news
1 楼 ddcz 2011-12-01  
好文章,以前一直不会

相关推荐

    spring-jpa(hibernate实现)环境搭建

    标题 "spring-jpa(hibernate实现)环境搭建" 涉及到的是在Java开发中使用Spring Data JPA和Hibernate来构建数据访问层的过程。Spring Data JPA是Spring框架的一部分,它提供了一种简化的方式来操作数据库,而...

    手动创建 SpringMvc +SpringDataJpa+Hibernate+ freemarker mavenProject+ 环境切换 webDemo

    只需提供一个继承自JpaRepository的接口,即可自动实现基本的查询方法。此外,Spring Data JPA还支持自定义查询,允许开发者使用@Query注解编写JPQL语句。 Hibernate作为JPA的实现,是一个强大的对象关系映射(ORM...

    7. JPA - Hibernate【从零开始学Spring Boot】

    例如,创建一个`UserRepository`,继承自`JpaRepository, Long>`: ```java public interface UserRepository extends JpaRepository, Long> { } ``` 现在,你可以通过这个接口进行增删改查操作,如`save()`、`...

    maven+springjpa+hibernate

    5. **配置Hibernate**:在Spring配置中启用JPA和Hibernate,例如在Spring Boot中,可以通过`@EnableJpaRepositories`注解启用JPA仓库,`@EntityScan`注解扫描实体类。 6. **使用Repository**:在服务层或控制器中...

    hibernate+jpa注解实现最简单的增删改查

    **hibernate+jpa注解实现最简单的增删改查** 在Java开发中,Hibernate和JPA(Java Persistence API)是两种广泛使用的对象关系映射(ORM)框架,它们简化了与数据库交互的过程,使开发者可以使用面向对象的方式来...

    springboot利用jpa连接hibernate用法2

    我们可以创建一个接口,继承自`JpaRepository`,并提供泛型参数,分别代表实体类和主键类型。这样,我们就可以无需编写任何DAO层代码,直接使用接口中的方法进行CRUD操作。 5. **Service层**: 为了遵循分层架构,...

    spring+springmvc+jpa(hibernate)框架整合

    在Repository接口中,可以使用JPA的Query注解或继承JpaRepository接口,实现对数据库的CRUD操作。 此外,Spring还提供了事务管理功能,可以通过@Transactional注解在方法级别声明事务,Spring会自动处理事务的开启...

    spring-boot-jpa-hibernate-demo:Spring Boot中的JPA + Hibernate + MySQL

    JPA 使用 Hibernate 作为实现方式JPA + Hibernate + MySQL in Spring Boot注意此项目使用spring-boot 1.4.0版本,不适用于spring-boot 2.0 版本;...利用jpa的注解特性与Hibernate结合,在数据存储的时

    JPA + Hibernate 3 CRUD操作历史审计日志的解决方案

    在Java开发中,数据持久化是一个关键环节,而Java Persistence API (JPA) 和 Hibernate 是常用的ORM(对象关系映射)框架,它们简化了数据库操作。这篇文章将深入探讨如何使用JPA与Hibernate实现CRUD(创建、读取、...

    Spring2.5 + JPA(Hibernate)实现

    标题 "Spring2.5 + JPA(Hibernate)实现" 指的是在Spring框架的2.5版本中集成Java Persistence API (JPA),并利用Hibernate作为JPA的实现。这通常是为了在一个基于Spring的应用程序中实现数据持久化,提供一个灵活、...

    Spring2.5整合JPA(Hibernate实现)所需的JAR包

    5. 创建Repository:定义接口继承自JPA提供的CrudRepository或JpaRepository,用于数据的CRUD操作。 6. 配置事务管理:Spring的声明式事务管理可以利用AOP来管理事务边界。 通过以上步骤,你可以实现Spring 2.5与...

    SpringBoot整合Hibernate纯注解版

    5. **Repository接口**: 创建一个接口继承`JpaRepository`,无需编写任何方法,Spring Boot会自动生成CRUD操作。 ```java import org.springframework.data.jpa.repository.JpaRepository; public interface ...

    Hibernate注解jar包

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

    JPA完成单表注解配置说明包括日期,大文本,二进制文本,枚举

    最后,创建一个继承自`JpaRepository`的接口,以便于操作`User`实体: ```java import org.springframework.data.jpa.repository.JpaRepository; public interface UserRepository extends JpaRepository, Long> {...

    springmvc+springjpa+hibernate整合简例

    例如,你可以创建一个`@Entity`注解的实体类,表示数据库表,然后创建一个`@Repository`接口,该接口继承自JpaRepository,自动提供了CRUD操作。 现在,我们要把Hibernate作为JPA的提供者。Hibernate具有强大的ORM...

    hibernate _annotation 注解编程

    - **扩展注解**:除了标准的 JPA 注解外,Hibernate 还提供了一些额外的注解来增强功能,例如: - **@Entity**:用于标记实体类。 - **@Identifier**:用于定义标识符生成策略。 - **@Property**:用于指定属性...

    JPA 实现继承关系

    通过阅读和理解JPA的源码,以及使用相关工具,如Hibernate作为JPA的实现,可以帮助你更好地理解和解决问题。 总结来说,JPA提供的继承机制使得我们能够优雅地在数据库层面上实现类的继承关系,提高了代码的可读性...

    使用JPA中@Query 注解实现update 操作方法(必看)

    在Java Persistence API (JPA)中,`@Query`注解是用于自定义查询的一种方式,它可以让我们在Repository接口中直接编写SQL或者HQL(Hibernate Query Language)来执行数据库操作。在本例中,我们将详细探讨如何使用`@...

Global site tag (gtag.js) - Google Analytics