Close

JPA - @JoinTable Examples

JPA JAVA EE 


@JoinTable can be used to map following associations to database table: bidirectional many-to-one/one-to-many, unidirectional many-to-one, and one-to-one (both bidirectional and unidirectional) associations.


import javax.persistence.*;
import java.util.List;

@Entity
public class EntityA {
@Id
@GeneratedValue
private int myIdA;
@OneToMany
@JoinTable(name = "MY_JOIN_TABLE",
joinColumns = {@JoinColumn(name = "MY_ENTITY_A_FK")},
inverseJoinColumns = {@JoinColumn(name = "MY_ENTITY_B_FK")}
)
private List<EntityB> entityBList;

public List<EntityB> getEntityBList() {
return entityBList;
}

public void setEntityBList(List<EntityB> entityBList) {
this.entityBList = entityBList;
}

@Override
public String toString() {
return "EntityA{" +
"myIdA=" + myIdA +
", entityBList=" + entityBList +
'}';
}
}
Original Post




@Entity
public class EntityA {
@Id
@GeneratedValue
private int myIdA;
private String strA;
@OneToMany
@JoinTable(name = "MY_JOIN_TABLE",
joinColumns = {@JoinColumn(name = "MY_ENTITY_A_FK", referencedColumnName = "myIdA")},
inverseJoinColumns = {@JoinColumn(name = "MY_ENTITY_B_FK", referencedColumnName = "myIdB")}
)
private List<EntityB> entityBList;

public String getStrA() {
return strA;
}

public void setStrA(String strA) {
this.strA = strA;
}

public List<EntityB> getEntityBList() {
return entityBList;
}

public void setEntityBList(List<EntityB> entityBList) {
this.entityBList = entityBList;
}

@Override
public String toString() {
return "EntityA{" +
"myIdA=" + myIdA +
", strA='" + strA + '\'' +
'}';
}
}
@Entity
public class EntityB {
@Id
@GeneratedValue
private int myIdB;
private String strB;
@ManyToOne
@JoinTable(name = "MY_JOIN_TABLE",
joinColumns = {@JoinColumn(name = "MY_ENTITY_B_FK", insertable = false,
updatable = false, referencedColumnName = "myIdB")},
inverseJoinColumns = {@JoinColumn(name = "MY_ENTITY_A_FK", insertable = false,
updatable = false, referencedColumnName = "myIdA")}
)
private EntityA refEntityA;

public String getStrB() {
return strB;
}

public void setStrB(String strB) {
this.strB = strB;
}

public EntityA getRefEntityA() {
return refEntityA;
}

public void setRefEntityA(EntityA refEntityA) {
this.refEntityA = refEntityA;
}

@Override
public String toString() {
return "EntityB{" +
"myIdB=" + myIdB +
", strB='" + strB + '\'' +
'}';
}
}
Original Post




@OneToOne unidirectional with @JoinTable:

@Entity
public class EntityA {
@Id
@GeneratedValue
private int myIdA;
private String stringA;
@OneToOne
@JoinTable(name = "MY_JOIN_TABLE",
joinColumns = {
@JoinColumn(name = "ENTITYA_FK", referencedColumnName = "myIdA")
},
inverseJoinColumns = {
@JoinColumn(name = "ENTITYB_FK", referencedColumnName = "myIdB", unique = true)
}
)
private EntityB entityB;
.............
}

@Entity
public class EntityB {
@Id
@GeneratedValue
private int myIdB;
private String stringB;
.............
}
Original Post




@OneToOne bidirectional with @JoinTable:

@Entity
public class EntityA {
@Id
@GeneratedValue
private int myIdA;
private String stringA;
@OneToOne
@JoinTable(name = "MY_JOIN_TABLE",
joinColumns = {
@JoinColumn(name = "ENTITYA_FK", referencedColumnName = "myIdA")
},
inverseJoinColumns = {
@JoinColumn(name = "ENTITYB_FK", referencedColumnName = "myIdB", unique = true)
}
)
private EntityB entityB;
.............
}

@Entity
public class EntityB {
@Id
@GeneratedValue
private int myIdB;
private String stringB;

@OneToOne(mappedBy = "entityB")
private EntityA entityA;
.............
}
Original Post

@Entity
public class Employee {
@Id
@GeneratedValue
private long id;
private String name;
@OneToMany
@JoinTable(name = "ASSIGNED_TASKS",
joinColumns = {@JoinColumn(name = "EMPLOYEE_FK")},
inverseJoinColumns = {@JoinColumn(name = "TASK_FK")})
@MapKeyColumn(name = "TASK_DATE")
private Map<Date, Task> tasks;
.............
}

@Entity
public class Task {
@Id
@GeneratedValue
private long id;
private String name;
private String description;
.............
}
Original Post




See Also