[英]Java JPA: ManyToMany relationship doesn't work
我正在使用JPA在IntelliJ中開發簡單的Web應用程序。 我有一個包含3個表和這些記錄的數據庫:
Entity1 Entity1_Entity2 Entity2
ID: Ref1: Ref2: ID:
1 1 2 1
2 1 1 2
同樣在Entity1_Entity2表中指定了這些關系:
(Ref1)-> Entity1(ID)
(Ref2)-> Entity2(ID)
使用JPA,我創建了實體Entity1和Entity2:
@Entity
@Table(name = "Entity1")
@Getter
@Setter
public class Entity1 implements Serializable {
@Id
@Column(name = "ID")
private int id;
@ManyToMany
@JoinTable(name = "Entity1_Entity2",
joinColumns = { @JoinColumn(name = "Ref1") },
inverseJoinColumns = { @JoinColumn(name = "Ref2") })
private List<Entity2> list = new ArrayList<>();
}
@Entity
@Table(name = "Entity2")
@Getter
@Setter
public class Entity2 implements Serializable {
@Id
@Column(name = "ID")
private int id;
@ManyToMany(mappedBy = "list")
private List<Entity1> otherList = new ArrayList<>();
}
我的問題是,當我選擇Entity1的實例(例如ID = 1)並調用entity1.getList()時,它始終返回空引用,但根據數據,應返回Entity2的2個對象。
試圖將@JoinTable批注更改為這些值,但沒有幫助:
@ManyToMany
@JoinTable(name = "Entity1_Entity2",
joinColumns = { @JoinColumn(name = "Ref1", referencedColumnName = "ID") },
inverseJoinColumns = { @JoinColumn(name = "Ref2", referencedColumnName = "ID") })
@ManyToMany
@JoinTable(name = "Entity1_Entity2")
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "Entity1_Entity2",
joinColumns = { @JoinColumn(name = "Ref1") },
inverseJoinColumns = { @JoinColumn(name = "Ref2") })
我認為您在使用@Getter和@Setter時遇到的問題
因為接下來我可以正常工作了:)
注意:我沒有嘗試使用@Getter和@Setter
ENTITY1
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
@Entity
@Table(name = "Entity1")
public class Entity1 implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Column(name = "ID")
private int id;
@ManyToMany
@JoinTable(name = "Entity1_Entity2",
joinColumns = { @JoinColumn(name = "Ref1", referencedColumnName = "ID") },
inverseJoinColumns = { @JoinColumn(name = "Ref2", referencedColumnName = "ID") })
private List<Entity2> list = new ArrayList<>();
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public List<Entity2> getList() {
return list;
}
public void setList(List<Entity2> list) {
this.list = list;
}
}
ENTITY2
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
@Entity
@Table(name = "Entity2")
public class Entity2 implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Column(name = "ID")
private int id;
@ManyToMany(mappedBy = "list")
private List<Entity1> otherList = new ArrayList<>();
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public List<Entity1> getOtherList() {
return otherList;
}
public void setOtherList(List<Entity1> otherList) {
this.otherList = otherList;
}
}
並按預期生成包含兩列的第三個表(ref1,ref2)
無論如何,我正在使用帶有Hibernate提供程序的JPA 2.1,因此執行下一個代碼將獲得您期望的結果。
Entity1實體1 = entityManager.find(Entity1.class,1);
entity1.getList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.