Java hibernate中的可连接多对多
因此,我在Medewerker和Taak这两个实体之间有很多关系,下面是我对这两个实体的代码: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
@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
}