Mapping Relationship State : Many to One Mapping « JPA « Java Tutorial






File: Project.java

import java.util.ArrayList;
import java.util.Collection;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;

@Entity
public class Project {
    @Id private int id;
    private String name;
    
    @OneToMany(mappedBy="project")
    private Collection<ProjectAssignment> assignments;

    public Project() {
        assignments = new ArrayList<ProjectAssignment>();
    }
    
    public int getId() {
        return id;
    }
    
    public void setId(int projectNo) {
        this.id = projectNo;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String projectName) {
        this.name = projectName;
    }
    
    public Collection<ProjectAssignment> getAssignments() {
        return assignments;
    }
    
    public String toString() {
        return " no: " + getId() + 
                ", name: " + getName();
    }
}

File: ProjectAssignment.java

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name="EMP_PROJECT")
@IdClass(ProjectAssignmentId.class)
public class ProjectAssignment {
    @Id
    @Column(name="EMP_ID", insertable=false, updatable=false)
    private int studentId;
    @Id
    @Column(name="PROJECT_ID", insertable=false, updatable=false)
    private int projectId;

    @ManyToOne
    @JoinColumn(name="EMP_ID")
    Student student;
    @ManyToOne
    @JoinColumn(name="PROJECT_ID")
    Project project;



    public ProjectAssignment() {}
    public ProjectAssignment(Student emp, Project proj) {
        this.studentId = emp.getId();
        this.student = emp;
        this.projectId = proj.getId();
        this.project = proj;
    }
    
    public int getEmpId() {
        return studentId;
    }
    
    public Student getEmployee() {
        return student;
    }

    public int getProjectId() {
        return projectId;
    }
    
    public Project getProject() {
        return project;
    }

}

File: ProjectAssignmentId.java

import java.io.Serializable;

public class ProjectAssignmentId implements Serializable {
  private int studentId;

  private int projectId;

  public ProjectAssignmentId() {
  }

  public ProjectAssignmentId(int Id, int projectId) {
    this.studentId = Id;
    this.projectId = projectId;
  }

  public int getEmpId() {
    return studentId;
  }

  public int getProjectId() {
    return projectId;
  }

  public boolean equals(Object o) {
    return ((o instanceof ProjectAssignmentId) && studentId == ((ProjectAssignmentId) o).getEmpId() && projectId == ((ProjectAssignmentId) o)
        .getProjectId());
  }

  public int hashCode() {
    return studentId + projectId;
  }
}

File: Student.java

import java.util.ArrayList;
import java.util.Collection;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;

@Entity
public class Student {
    @Id private int id;

    private String name;

    @OneToMany(mappedBy="student")
    private Collection<ProjectAssignment> assignments;

    public Student() {
        assignments = new ArrayList<ProjectAssignment>();
    }
    
    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;
    }
    
    public Collection<ProjectAssignment> getAssignments() {
        return assignments;
    }

    public String toString() {
        return "Student id: " + getId() + " name: " + getName();
    }
}

File: Helper.java

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;

public class Helper {
  public static void checkData() throws Exception {
    Class.forName("org.hsqldb.jdbcDriver");
    Connection conn = DriverManager.getConnection("jdbc:hsqldb:data/tutorial", "sa", "");
    Statement st = conn.createStatement();

    ResultSet mrs = conn.getMetaData().getTables(null, null, null, new String[] { "TABLE" });
    while (mrs.next()) {
      String tableName = mrs.getString(3);
      System.out.println("\n\n\n\nTable Name: "+ tableName);

      ResultSet rs = st.executeQuery("select * from " + tableName);
      ResultSetMetaData metadata = rs.getMetaData();
      while (rs.next()) {
        System.out.println(" Row:");
        for (int i = 0; i < metadata.getColumnCount(); i++) {
          System.out.println("    Column Name: "+ metadata.getColumnLabel(i + 1)+ ",  ");
          System.out.println("    Column Type: "+ metadata.getColumnTypeName(i + 1)+ ":  ");
          Object value = rs.getObject(i + 1);
          System.out.println("    Column Value: "+value+"\n");
        }
      }
    }
  }
}

File: Main.java

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;

public class Main {
  static EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPAService");

  static EntityManager em = emf.createEntityManager();

  public static void main(String[] a) throws Exception {
    em.getTransaction().begin();


    


    em.getTransaction().commit();
    em.close();
    emf.close();

    Helper.checkData();
  }
}

File: persistence.xml

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence" version="1.0">
  <persistence-unit name="JPAService" transaction-type="RESOURCE_LOCAL">
    <properties>
      <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
      <property name="hibernate.hbm2ddl.auto" value="update"/>
      <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
      <property name="hibernate.connection.username" value="sa"/>
      <property name="hibernate.connection.password" value=""/>
      <property name="hibernate.connection.url" value="jdbc:hsqldb:data/tutorial"/>
    </properties>
  </persistence-unit>
</persistence>
  Download:  JPA-MappingRelationshipState.zip( 5,291 k)








22.11.Many to One Mapping
22.11.1.Mapping Relationship State
22.11.2.Many To One Set Join Column Name
22.11.3.Many to One Map With Entity Hierarchy
22.11.4.Many To One Mapping Unique Join Column
22.11.5.Many To One Mapping Manually Linking
22.11.6.Many To One Insertable Nullable Updatable
22.11.7.Many To One Cascasde Persist
22.11.8.Many To One Cascade Remove
22.11.9.Many To One Cascade Merge