Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java hibernate中的可连接多对多_Java_Mysql_Hibernate_Jointable - Fatal编程技术网

Java hibernate中的可连接多对多

Java hibernate中的可连接多对多,java,mysql,hibernate,jointable,Java,Mysql,Hibernate,Jointable,因此,我在Medewerker和Taak这两个实体之间有很多关系,下面是我对这两个实体的代码: @Entity @Table(name = "T_MEDEWERKER") public class Medewerker { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String naam; private String functie; @ManyToOne @Cascade(o

因此,我在Medewerker和Taak这两个实体之间有很多关系,下面是我对这两个实体的代码:

@Entity
@Table(name = "T_MEDEWERKER")
public class Medewerker {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String naam;
private String functie;
@ManyToOne
@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
@JoinColumn(name = "festivalId", nullable = false)
private Festival festival;
@ManyToMany
@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
@JoinTable(name="T_MEDEWERKER_TAAK",
        joinColumns = {@JoinColumn(name="medewerkerId")},
        inverseJoinColumns = {@JoinColumn(name="taakId")})
private List<Taak> taken = new ArrayList<Taak>();

public Medewerker(){

}

public Medewerker(String naam, String functie) {
    this.naam = naam;
    this.functie = functie;
}

public void addTaak(Taak t) {
    taken.add(t);
}

public void setFestival(Festival festival) {
    this.festival = festival;
}
}

@Entity
@Table(name = "T_TAAK")
public class Taak {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String omschrijving;
@ManyToMany
@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE})
@JoinTable(name="T_MEDEWERKER_TAAK",
        joinColumns = {@JoinColumn(name="taakId")},
        inverseJoinColumns = {@JoinColumn(name="medewerkerId")})
private List<Medewerker> medewerkers = new ArrayList<Medewerker>();

public Taak(){

}

public Taak(String omschrijving) {
    this.omschrijving = omschrijving;
}

private void addMedewerker(Medewerker m){
    medewerkers.add(m);
}           
}

我举了一个例子来说明许多关系,看看并使您的代码适应这一点,我认为这是可行的

我有一个表ST_Product和表ST_partner_subsidiary,我有一个表ST_Product_subsidiary(其中一个外键为ST_Product,另一个外键为ST_partner_subsidiary),因此我必须只映射表ST_Product和ST_partner_subsidiary,然后我有:

@Entity
@Table(name = "ST_PRODUCT")
public class Product {
// OTHER columns
    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinTable(name = "ST_PRODUCT_SUBSIDIARY", joinColumns = { 
        @JoinColumn(
        name = "PRODUCT_ID", 
        nullable = false, 
        updatable =          false) }, 
    inverseJoinColumns = { @JoinColumn(name = "PARTNER_SUBSIDIARY_ID", 
                nullable = false, updatable = false) })

public List<ProductSubsidiary> getProductSubsidiaries() {
    return productSubsidiaries;
}
//Other columns
}
@实体
@表(name=“ST_产品”)
公共类产品{
//其他栏目
@ManyToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL)
@JoinTable(name=“ST_产品_子公司”,JointColumns={
@连接柱(
name=“产品标识”,
nullable=false,
updateable=false)},
inverseJoinColumns={@JoinColumn(name=“PARTNER\u SUBSIDIARY\u ID”,
nullable=false,updateable=false)})
公共列表getProductSubsiders(){
返回子公司;
}
//其他栏目
}
您不映射中间表,您只在两个实体中引用它。在这种情况下,您可以看到ST_PRODUCT_SUBSIDIARY仅被引用


希望有帮助。

我想我和你一样,这两个@JoinColumn name属性就是你自己给它们取的名字,对吗?(他们指的不是外键什么的?)我修好了!我愚蠢地在两个相互引用的表中都有外键
@Entity
@Table(name = "ST_PRODUCT")
public class Product {
// OTHER columns
    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinTable(name = "ST_PRODUCT_SUBSIDIARY", joinColumns = { 
        @JoinColumn(
        name = "PRODUCT_ID", 
        nullable = false, 
        updatable =          false) }, 
    inverseJoinColumns = { @JoinColumn(name = "PARTNER_SUBSIDIARY_ID", 
                nullable = false, updatable = false) })

public List<ProductSubsidiary> getProductSubsidiaries() {
    return productSubsidiaries;
}
//Other columns
}