2015년 12월 25일 금요일

Entity Inheritance example [Entities for single table]

pom.xml


 4.0.0
 org.blog.test
 entity-test-project
 0.1.0
 
  org.springframework.boot
  spring-boot-starter-parent
  1.3.1.RELEASE
 
 
  
   org.springframework.boot
   spring-boot-starter-web
  
  
   org.springframework.boot
   spring-boot-starter-data-jpa
  
  
   mysql
   mysql-connector-java
  
  
   org.projectlombok
   lombok
   1.16.6
  
  
   ch.qos.logback
   logback-core
   1.1.3
  
  
   ch.qos.logback
   logback-classic
  
  
   ch.qos.logback
   logback-access
  
 


src/main/resources/logback.xml


 
  
  
   %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
   
  
 

 
  
  
 


src/main/resources/application.properties

======================================
# Datasource
======================================
spring.jpa.hibernate.ddl-auto=create
spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.username=root
spring.datasource.password=root123
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

src/main/java/Person.java

package org.blog.test.entity;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;

import lombok.Data;

@Entity
@Table(name = "person")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Data
public class Person implements Serializable {

    private static final long serialVersionUID = -7755708592262294343L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column
    private Long id;

    @Column
    private String name;
}


src/main/java/Student.java

package org.blog.test.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;

@Entity
@Table(name = "person")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class Student extends Person {

    private static final long serialVersionUID = 6147507813299618966L;

    @Column
    private Long age;
}

src/main/java/PersonRepository.java

package org.blog.test.repository;

import org.blog.test.entity.Person;
import org.springframework.data.jpa.repository.JpaRepository;

public interface PersonRepository extends JpaRepository {
}

src/main/java/StudentRepository.java

package org.blog.test.repository;

import org.blog.test.entity.Person;
import org.blog.test.entity.Student;
import org.springframework.data.jpa.repository.JpaRepository;

public interface StudentRepository extends JpaRepository {

}

src/main/java/TestApplication.java

package org.blog.test;

import javax.annotation.PostConstruct;

import org.blog.test.entity.Person;
import org.blog.test.entity.Student;
import org.blog.test.repository.PersonRepository;
import org.blog.test.repository.StudentRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import lombok.extern.slf4j.Slf4j;

@SpringBootApplication
@Slf4j
public class TestApplication {

    @Autowired
    private StudentRepository studentRepository;

    @Autowired
    private PersonRepository personRepository;

    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class);
    }

    @PostConstruct
    public void run() {

        Person person = new Person();
        person.setName("person");
        personRepository.save(person);

        Student student = new Student();
        student.setName("student");
        student.setAge(20L);
        studentRepository.save(student);

        Student student1 = new Student();
        student1.setName("student1");
        student1.setAge(21L);
        studentRepository.save(student1);

        for (Person personData : personRepository.findAll()) {
            log.info("person data : {}", personData);
        }

        for (Student studentData : studentRepository.findAll()) {
            log.info("student data : {}", studentData);
        }

    }

}


Execution Result

22:40:39.955 [main] INFO org.blog.test.TestApplication - person data : Person(id=1, name=person)
22:40:39.956 [main] INFO org.blog.test.TestApplication - person data : Student(super=Person(id=2, name=student), age=20)
22:40:39.956 [main] INFO org.blog.test.TestApplication - person data : Student(super=Person(id=3, name=student1), age=21)
22:40:39.964 [main] INFO org.blog.test.TestApplication - student data : Student(super=Person(id=2, name=student), age=20)
22:40:39.964 [main] INFO org.blog.test.TestApplication - student data : Student(super=Person(id=3, name=student1), age=21)

댓글 없음 :

댓글 쓰기