Java 为什么我的联接表是空的?(使用Hibernate映射多对多)

Java 为什么我的联接表是空的?(使用Hibernate映射多对多),java,mysql,hibernate,mapping,many-to-many,Java,Mysql,Hibernate,Mapping,Many To Many,我正在尝试进行多对多映射,但下面的代码有一个问题。使用此代码创建的表看起来不错,外键添加正确。当我试图创建相关对象并将其保存到db时,就会出现问题。午餐应用程序后,我在KURS表中有一行,在KATEGORIE表中有一行,但第三个表-KURSY_KATEGORIE是空的:( 表1: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN

我正在尝试进行多对多映射,但下面的代码有一个问题。使用此代码创建的表看起来不错,外键添加正确。当我试图创建相关对象并将其保存到db时,就会出现问题。午餐应用程序后,我在KURS表中有一行,在KATEGORIE表中有一行,但第三个表-KURSY_KATEGORIE是空的:(

表1:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2012-11-08 11:48:42 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
    <class name="model.Kurs" table="KURS" node="kurs">
       <id name="id" type="long">
           <column name="ID_KURSU" />
           <generator class="native" />
       </id>
       ...

       <set cascade="save-update" name="kategorie" inverse="true" lazy="true" table="KURSY_KATEGORIE">
           <key foreign-key="FK_KATEGORIE_KURSY">
               <column name="ID_KURSU" />
           </key>
           <many-to-many class="model.Kategoria" column="ID_KATEGORI"/>
       </set>   
    </class>
</hibernate-mapping>

...
表2:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2012-11-08 11:48:42 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
    <class name="model.Kategoria" table="KATEGORIA" node="kategoria">
        <id name="id" type="long">
            <column name="ID_KATEGORI" />
            <generator class="native" />
        </id>
        ...

        <set cascade="save-update" name="kursy" table="KURSY_KATEGORIE" inverse="true" lazy="true">
            <key foreign-key="FK_KURSY_KATEGORIE">
                <column name="ID_KATEGORI" />
            </key>
            <many-to-many class="model.Kurs" column="ID_KURSU"/>
        </set>
    </class>
</hibernate-mapping>

...
和.java文件:

    Session session = SESSION_FACTORY.openSession();
    Transaction tx = session.beginTransaction();

    GregorianCalendar Data_rozp = new GregorianCalendar();
    Kategoria cat1 = new Kategoria("Kategoria1");

    Set<Kategoria> kategorie = new HashSet<Kategoria>(3);
    kategorie.add(cat1);

    Kurs k1 = new Kurs(Data_rozp, "kurs1", 100);   

    Set<Kurs> kursy = new HashSet<Kurs>(1);
    kursy.add(k1);

    cat1.setKursy(kursy);

    k1.setKategorie(kategorie);            

    session.save(cat1);
    session.save(k1);

    tx.commit();
    session.close();
Session Session=Session_FACTORY.openSession();
事务tx=会话.beginTransaction();
GregorianCalendar Data_rozp=新的GregorianCalendar();
Kategoria cat1=新Kategoria(“Kategoria1”);
Set kategorie=新哈希集(3);
kategorie.add(第1类);
Kurs k1=新的Kurs(数据“kurs1”,100);
Set kursy=新哈希集(1);
添加(k1);
第1类:setKursy(kursy);
k1.setKategorie(kategorie);
会话保存(cat1);
session.save(k1);
tx.commit();
session.close();
尝试更改:

<set cascade="save-update" name="kursy" table="KURSY_KATEGORIE" inverse="true" lazy="true">

致:


以及:


致:


我很惊讶hibernate没有为无效配置抛出异常(两端不能设置为反向-一个必须是所有者)

<set cascade="save-update" name="kursy" table="KURSY_KATEGORIE" lazy="true">
<set cascade="save-update" name="kategorie" inverse="true" lazy="true" table="KURSY_KATEGORIE">
<set name="kategorie" inverse="true" lazy="true" table="KURSY_KATEGORIE">