在保存Score之前先将Student保存~

解决方案 »

  1.   

    <id name="id" type="java.lang.Integer">
                <column name="id" not-null="true" />
                 <generator class="native" />
            </id>但是你定义的明明id是主键啊
      

  2.   

    你说的保存是插入?还是持久化?
    ===========================
    就是存入数据库啊,在往数据库里添加Score之前先要添加Student,另外你的表的映射也有点问题,<id/>好象要对应主键的
      

  3.   

    哦,谢谢
    其实,我开始的设想是把主键个自动标示分开,
    <generator class="native" />这个属性只能放在<id/>里,但我的StuNo是String型,
    又不能弄自动增长,而我也不希望他这样有其他的办法吗,我的Hibernate学的太浅了
      

  4.   

    我的意图很简单,就是能否把<generator class="native" />放在<property name="id">里,
    StuNo放在<id>里,但<generator class="native" />只能放在<id>里
    因为根据实际的需求:标示列是没有任何意义的字段,所以我才尝试怎样实现这种配置
      

  5.   

    对于自动增长列不需要做那些设置吧
    你的Score表里面哪个是主键啊?
      

  6.   

    那你是说不用在配置文件中设置<generator  />?
    只要有主键,也就是<id>就可以了。
    我感觉自己好晕啊
      

  7.   

    在Student表里面StuNo是主键,id是自增长列
    在Score表里id是主键并且还是自增长列,StuNo是外键,是这样的吗?先理解清楚
      

  8.   

    谢谢你啊,这么有耐心
    我估计走了弯路,现在想想根本就没必要在配置文件里管那个不是主键的student表里的自增长列
    是吗?
      

  9.   

    Score表的映射文件:
    <hibernate-mapping>
    <class name="com.Score" table="score" schema="dbo" catalog="pubs">
    <id name="id" type="java.lang.Integer">
    <column name="id" />
    <generator class="native" />
    </id>
    <many-to-one name="studentTable" class="com.StudentTable" fetch="select">
    <column name="stuNo" length="10" />
    </many-to-one>
    <property name="score" type="java.lang.Float">
    <column name="score" precision="53" scale="0" />
    </property>
    </class>
    </hibernate-mapping>StudentTable表的映射文件:
    <hibernate-mapping>
    <class name="com.StudentTable" table="studentTable" schema="dbo" catalog="pubs">
    <id name="stuNo" type="java.lang.String" >
    <column name="stuNo" not-null="true" length="10" />
    <generator class="native" />
    </id>
    <property name="id" type="java.lang.Integer">
    <column name="id"/>
    </property>
    <property name="stuName" type="java.lang.String">
    <column name="stuName" length="10" />
    </property>
    <set name="scores" inverse="true">
    <key>
    <column name="stuNo" length="10" />
    </key>
    <one-to-many class="com.Score" />
    </set>
    </class>
    </hibernate-mapping>
    试试吧,^_^
      

  10.   

    啊,<id name="stuNo" type="java.lang.String" >
    <column name="stuNo" not-null="true" length="10" />
    <generator class="native" />
    </id>
    stuNo是String,不能设为自增长呀
      

  11.   

    string怎么个自动增长法啊....
    当然你可以让HIBERNATE采用算法自动生产string类型的主键
    记得好像配置文件里边的主键生产策略有6种还是9种方法..其中有个就是
    自动生产string类型的主键值