Java Hibernate复合元素映射

Java Hibernate复合元素映射,java,hibernate,mapping,Java,Hibernate,Mapping,我有以下关系:Form--[order]--属性。 一个表单有n个属性,一个属性可以属于n个表单。该关系需要保存一个额外属性:order 我有一个类形式,一个类属性和一个类形式_属性,如下所示: public class FormAttribute{ Form form; Attribute attribute; int attrOrder; // getters/setters } <set name="attributes" table="for

我有以下关系:Form--[order]--属性。 一个表单有n个属性,一个属性可以属于n个表单。该关系需要保存一个额外属性:order

我有一个类形式,一个类属性和一个类形式_属性,如下所示:

public class FormAttribute{
    Form form;
    Attribute attribute; 
    int attrOrder;

     // getters/setters
}
<set name="attributes" table="form_attribute" inverse="true" cascade="all-delete-orphan" order-by="attrOrder" > 
    <key column="form" not-null="true"/>
    <composite-element class="FormAttribute" >
        <many-to-one name="attribute" column="attribute" class="ExamAttribute" not-null="true" cascade="save-update" />
        <property name="attrOrder" column="attr_order" type="integer" not-null="true" />
    </composite-element>
</set>
在表单映射上,我是这样映射的:

public class FormAttribute{
    Form form;
    Attribute attribute; 
    int attrOrder;

     // getters/setters
}
<set name="attributes" table="form_attribute" inverse="true" cascade="all-delete-orphan" order-by="attrOrder" > 
    <key column="form" not-null="true"/>
    <composite-element class="FormAttribute" >
        <many-to-one name="attribute" column="attribute" class="ExamAttribute" not-null="true" cascade="save-update" />
        <property name="attrOrder" column="attr_order" type="integer" not-null="true" />
    </composite-element>
</set>


当我创建一个新表单并关联属性时,我希望在保存时看到表单_属性表被填充。但只有表单和属性表是可用的。这正常吗?我必须手动更新表单属性关系吗?

因此,最后这是一个有点愚蠢的问题。如果我不先保存属性,并且由于属性端没有设置来管理表单和属性之间的链接,那么复合元素就不会被保存。先保存新属性,然后保存表单,解决了我的问题。

因此,最后这是一个有点愚蠢的问题。如果我不先保存属性,并且由于属性端没有设置来管理表单和属性之间的链接,那么复合元素就不会被保存。首先保存新属性,然后保存表单解决了我的问题。

在保存对象后删除inverse=“true”并添加session.flush(),确实可以让它工作,但为什么我必须强制刷新?我使用的是spring 3.2.5和Hibernate 4刷新不应该与它有任何关系。顺便说一句:最好使用注释而不是xml,这是一种新的方式。不过,当我不刷新时,它不会通过。我保存表单的服务方法是@Transactionnal(readOnly=false)。“最好使用注释而不是xml,这是一种新方法”不是一个很好的参数:PRemoving inverse=“true”并在保存对象后添加一个session.flush(),确实可以工作,但为什么我必须强制刷新?我使用的是spring 3.2.5和Hibernate 4刷新不应该与它有任何关系。顺便说一句:最好使用注释而不是xml,这是一种新的方式。不过,当我不刷新时,它不会通过。我保存表单的服务方法是@Transactionnal(readOnly=false)。“更好地使用注释而不是xml,这是一种新的方式”这不是一个很好的论点:P