[英]Persisting non-owning side object in Hibernate @ManyToMany bidirectional mapping does not persist data in joining table
I am trying to implement ManyToMany bidirectional mapping in Hibernate. 我正在尝试在Hibernate中实现ManyToMany双向映射。 But, when I test the application by persisting non-owning side object, Hibernate does not persist data in join table. 但是,当我通过持久保存非所有者副对象来测试应用程序时,Hibernate不会在连接表中持久保存数据。
Here is my code: 这是我的代码:
College.java: College.java:
@Entity
@Table(name="college")
public class College {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="college_id")
private int id;
@Column(name="college_name")
private String name;
@ManyToMany(mappedBy="colleges",cascade=CascadeType.ALL)
private Set<Certification> certifications;
// getters and setters
}
Certification.java: Certification.java:
@Entity
@Table(name="certification")
public class Certification {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="certification_id")
private int id;
@Column(name="certification_name")
private String name;
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name="certification_college",joinColumns=@JoinColumn(name="certification_id"),inverseJoinColumns=@JoinColumn(name="college_id"))
private Set<College> colleges;
// getters and setters
}
MainApplication.java: MainApplication.java:
public class MainApplication{
public static void main(String[] args) {
Certification certification1 = new Certification();
certification1.setName("Java");
Certification certification2 = new Certification();
certification2.setName("C++");
Set<Certification> certifications = new HashSet<Certification>();
certifications.add(certification1);
certifications.add(certification2);
College college1 = new College();
college1.setName("ABC");
college1.setCertifications(certifications);
College college2 = new College();
college2.setName("XYZ");
college2.setCertifications(certifications);
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.getCurrentSession();
Transaction transaction = session.beginTransaction();
session.save(college1);
session.save(college2);
transaction.commit();
sessionFactory.close();
}
}
Here's the SQL Output: 这是SQL输出:
Hibernate: insert into college (college_name) values (?)
Hibernate: insert into certification (certification_name) values (?)
Hibernate: insert into certification (certification_name) values (?)
Hibernate: insert into college (college_name) values (?)
Thank you. 谢谢。
You're missing the @JoinTable annotation in your College.java class. 您在College.java类中缺少@JoinTable批注。 You're persisting an entity that is not aware of the table that maps the relationship. 您要保留一个不知道映射关系表的实体。
Add the following code after the @ManyToMany annotation of the "certifications" attribute. 在“证书”属性的@ManyToMany批注之后添加以下代码。
@JoinTable(name="certification_college",joinColumns=@JoinColumn(name="college_id"),inverseJoinColumns=@JoinColumn(name="certification_id"))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.