首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Hibernate @ManyToMany双向映射中持久化非拥有的侧对象不会在连接表中持久化数据。

在Hibernate @ManyToMany双向映射中持久化非拥有的侧对象不会在连接表中持久化数据。
EN

Stack Overflow用户
提问于 2018-09-24 16:22:56
回答 1查看 284关注 0票数 0

我试图在Hibernate中实现ManyToMany双向映射。但是,当我通过持久化非拥有的侧对象来测试应用程序时,Hibernate不会将数据持久化到连接表中。

这里是我的代码:

College.java:

代码语言:javascript
复制
@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:

代码语言:javascript
复制
@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:

代码语言:javascript
复制
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(); 
    }
}

这里是SQL输出:

代码语言:javascript
复制
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 (?)

谢谢你,

EN

回答 1

Stack Overflow用户

发布于 2018-09-24 16:41:41

您在College.java类中缺少了@JoinTable注释。您正在持久化一个不知道映射关系的表的实体。

在“证书”属性的@ManyToMany注释之后添加以下代码。

代码语言:javascript
复制
@JoinTable(name="certification_college",joinColumns=@JoinColumn(name="college_id"),inverseJoinColumns=@JoinColumn(name="certification_id"))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52483559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档