簡體   English   中英

Java JPA:ManyToMany關系不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM