Data JPA-Association Mapping
non-collection | collection-type | ||
1...1 (@ManyToOne + FK Column Unique) Employee---<>Profile |
*...1 (@ManyToOne) Employee---<>Dept |
1...* (@OneToMany) Product---<>Model |
*...* (@ManyToMany Student---<>Course |
class Employee{ @ManyToOne @JoinColumn(name="pidFk",unique = true) private Dept dob; //HAS-A } |
class Employee{ @ManyToOne @JoinColumn(name="didFk") private Dept dob; //HAS-A } |
class Product{ |
class Student{ |
Example 1:(*...1) (@ManyToOne) Employee---<>Dept (HAS-A)
1.Models Class (Employee) package in.nareshit.raghu.model; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor @Entity @Table(name="emptab") public class Employee { @Id @Column(name="eid") private Integer empId; @Column(name="ename") private String empName; @Column(name="esal") private Double empSal; @ManyToOne @JoinColumn(name="didFk") private Dept dob; //HAS-A }
2.Models Class (Dept)
package in.nareshit.raghu.model; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor @Entity @Table(name="depttab") public class Dept { @Id @Column(name="did") private Integer deptId; @Column(name="dcode") private String deptCode; @Column(name="dadmin") private String deptAdmin; } 3. Dept Repository package in.nareshit.raghu.repo; import org.springframework.data.jpa.repository.JpaRepository; import in.nareshit.raghu.model.Dept; public interface DeptRepository extends JpaRepository<Dept, Integer> { } 4.Employee Repository package in.nareshit.raghu.repo; import org.springframework.data.jpa.repository.JpaRepository; import in.nareshit.raghu.model.Employee; public interface EmployeeRepository extends JpaRepository<Employee, Integer> { } 5. Runner class package in.nareshit.raghu.runner; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; import in.nareshit.raghu.model.Dept; import in.nareshit.raghu.model.Employee; import in.nareshit.raghu.repo.DeptRepository; import in.nareshit.raghu.repo.EmployeeRepository; @Component public class DataInertRunner implements CommandLineRunner { @Autowired private DeptRepository drepo; @Autowired private EmployeeRepository erepo; public void run(String... args) throws Exception { Dept d1 = new Dept(10,"DEV","SANJAY"); drepo.save(d1); Employee e1 = new Employee(1, "A", 2.2, d1); Employee e2 = new Employee(2, "B", 3.2, d1); Employee e3 = new Employee(3, "C", 4.3, d1); erepo.save(e1); erepo.save(e2); erepo.save(e3); } }
Example 2:(1...*) (@OneToMany) Product---<>Model(HAS-A)
1. Model classes package in.nareshit.raghu.model; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor @Entity @Table(name="modeltab") public class Model { @Id @Column(name="mid") private Integer modId; @Column(name="mcode") private String modCode; @Column(name="mcolor") private String modColor; @Column(name="mcost") private Double modCost; } 2. Product Class package in.nareshit.raghu.model; import java.util.Set; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.OneToMany; import javax.persistence.Table; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor @Entity @Table(name="prodtab") public class Product { @Id @Column(name="pid") private Integer prodId; @Column(name="pcode") private String prodCode; @Column(name="pvendor") private String vendor; @OneToMany @JoinColumn(name="midFk") private Set mobs; //HAS-A } 3. Model Interface package in.nareshit.raghu.repo; import org.springframework.data.jpa.repository.JpaRepository; import in.nareshit.raghu.model.Model; public interface ModelRepository extends JpaRepository<Model, Integer> { } 4. Product Repositpry package in.nareshit.raghu.repo; import org.springframework.data.jpa.repository.JpaRepository; import in.nareshit.raghu.model.Product; public interface ProductRepository extends JpaRepository<Product, Integer> { } 5. Runner class package in.nareshit.raghu.runner; import java.util.Set; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; import in.nareshit.raghu.model.Model; import in.nareshit.raghu.model.Product; import in.nareshit.raghu.repo.ModelRepository; import in.nareshit.raghu.repo.ProductRepository; @Component public class TestDataInertRunner implements CommandLineRunner { @Autowired private ModelRepository mrepo; @Autowired private ProductRepository prepo; public void run(String... args) throws Exception { Model m1 = new Model(105, "M34","RED", 5200.0); Model m2 = new Model(106, "K45","BLUE", 5400.0); Model m3 = new Model(107, "YT9","PINK", 5900.0); mrepo.save(m1); mrepo.save(m2); mrepo.save(m3); Product p1 = new Product(10, "S-MOBILE", "SANUI", Set.of(m1,m2,m3)); prepo.save(p1); } }
Example 3:(*...*) (@ManyToMany) Student---<>Course (HAS-A)
1. Models (Course) package in.nareshit.raghu.model; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor @Entity @Table(name="crstab") public class Course { @Id @Column(name="cid") private Integer crsId; @Column(name="cname") private String crsName; @Column(name="cfee") private Double crsFee; } 2.Model (Student) package in.nareshit.raghu.model; import java.util.Set; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.Table; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor @Entity @Table(name="stdtab") public class Student { @Id @Column(name="sid") private Integer stdId; @Column(name="sname") private String stdName; @Column(name="smail") private String stdEmail; @ManyToMany @JoinTable( name="stdcrstab", joinColumns = @JoinColumn(name="sidFk"), inverseJoinColumns = @JoinColumn(name="cidFk") ) private Set cob; //HAS-A } 3. Repository (Student) package in.nareshit.raghu.repo; import org.springframework.data.jpa.repository.JpaRepository; import in.nareshit.raghu.model.Student; public interface StudentRepository extends JpaRepository<Student, Integer> { } 4.Repository (Course) package in.nareshit.raghu.repo; import org.springframework.data.jpa.repository.JpaRepository; import in.nareshit.raghu.model.Course; public interface CourseRepository extends JpaRepository<Course, Integer> { } 5. Runner class package in.nareshit.raghu.runner; import java.util.Set; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; import in.nareshit.raghu.model.Course; import in.nareshit.raghu.model.Student; import in.nareshit.raghu.repo.CourseRepository; import in.nareshit.raghu.repo.StudentRepository; @Component public class DataInsertRunner implements CommandLineRunner { @Autowired private StudentRepository srepo; @Autowired private CourseRepository crepo; public void run(String... args) throws Exception { Course c1 = new Course(50, "CoreJava", 500.0); Course c2 = new Course(51, "SpringBoot", 600.0); Course c3 = new Course(52, "Microservices", 800.0); crepo.save(c1); crepo.save(c2); crepo.save(c3); Student s1 = new Student(5, "AJAY", "aj@gm.com", Set.of(c1,c2)); Student s2 = new Student(6, "SYED", "sy@gm.com", Set.of(c2,c3)); srepo.save(s1); srepo.save(s2); } }
Example 34(1...1) (@ManyToOne) Employee---<>Profile (HAS-A)
1. Model package in.nareshit.raghu.model; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor @Entity @Table(name="profiletab") public class Profile { @Id @Column(name="prid") private Integer profId; @Column(name="prcode") private String profCode; @Column(name="pexp") private Double profExp; @Column(name="ppack") private Double profPack; } ----- package in.nareshit.raghu.model; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor @Entity @Table(name="emptab") public class Employee { @Id @Column(name="eid") private Integer empId; @Column(name="ename") private String empName; @Column(name="edsg") private String empDesg; @ManyToOne @JoinColumn(name="pidFk",unique = true) //no duplicates //@JoinColumn(name="pidFk",unique = true,nullable = false) //no null values even private Profile pob;//HAS-A } 2. Repository Interface package in.nareshit.raghu.repo; import org.springframework.data.jpa.repository.JpaRepository; import in.nareshit.raghu.model.Employee; public interface EmployeeRepository extends JpaRepository<Employee, Integer> { } ------- package in.nareshit.raghu.repo; import org.springframework.data.jpa.repository.JpaRepository; import in.nareshit.raghu.model.Profile; public interface ProfileRepository extends JpaRepository<Profile, Integer> { } 3.Runner class package in.nareshit.raghu.runner; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; import in.nareshit.raghu.model.Employee; import in.nareshit.raghu.model.Profile; import in.nareshit.raghu.repo.EmployeeRepository; import in.nareshit.raghu.repo.ProfileRepository; @Component public class DataInertRunner implements CommandLineRunner { @Autowired private ProfileRepository prepo; @Autowired private EmployeeRepository erepo; public void run(String... args) throws Exception { Profile p1 = new Profile(10, "PER", 8.5, 15.9); Profile p2 = new Profile(11, "PET", 5.5, 10.6); Profile p3 = new Profile(12, "PTH", 8.0, 12.0); prepo.save(p1); prepo.save(p2); prepo.save(p3); Employee e1 = new Employee(1, "SAM", "DEV", p1); Employee e2 = new Employee(2, "SYED", "BA", p2); Employee e3 = new Employee(3, "JAI", "QA", p3); erepo.save(e1); erepo.save(e2); erepo.save(e3); } }
No Comments Yet!!