请问Hibernate里面非主键关联怎么配置,比如说student表里有id、name(unique),score表里有id、type、sname(关联student的name),百度了一下是用property-ref这个属性,但不知道怎么配置,保存student时可以级联保存score,保存score时就保存不了student会出错了。Hibernateproperty-ref

解决方案 »

  1.   

    <hibernate-mapping>
    <class name="com.year.entity.Student" table="student" catalog="hbsp">
    <id name="id" type="java.lang.Integer">
    <column name="id" />
    <generator class="increment" />
    </id>
    <property name="name" type="java.lang.String">
    <column name="name" length="20" unique="true" />
    </property>
    <property name="age" type="java.lang.Integer">
    <column name="age" />
    </property>
    <set name="scores" inverse="true" cascade="save-update">
    <key column="sname" property-ref="name" />
    <one-to-many class="com.year.entity.Score" />
    </set>
    <set name="teachers" inverse="true" table="stu_tea" catalog="hbsp">
    <key>
    <column name="sid" not-null="true" />
    </key>
    <many-to-many entity-name="com.year.entity.Teacher">
    <column name="tid" not-null="true" />
    </many-to-many>
    </set>
    </class>
    </hibernate-mapping>score.hbm.xml
    <hibernate-mapping>
        <class name="com.year.entity.Score" table="score" catalog="hbsp">
            <id name="id" type="java.lang.Integer">
                <column name="id" />
                <generator class="increment" />
            </id>
            <many-to-one name="student" class="com.year.entity.Student" fetch="select" property-ref="name" column="sname"/>
            <property name="score" type="java.lang.Integer">
                <column name="score" />
            </property>
            <property name="type" type="java.lang.String">
                <column name="type" length="20" />
            </property>
        </class>
    </hibernate-mapping>
    Client.java
    public static void test2(ModelDAO dao){
    Student st = new Student();
    st.setAge(16);st.setName("afga");
    Score sc = new Score();
    sc.setScore(83);sc.setType("qz");sc.setStudent(st);
    st.getScores().add(sc);
    dao.save(sc);
    }
      

  2.   

    那这个关系 也应该 是  many-to-many