刚才没人理,重新问,帮帮我,愁一晚上了user表 user_id 和uni_code
university表  uni_id 和 uni_code
通过uni_code关联。想往user表插入一条数据。程序现在运行就两张表一同插入数据。可是我不需要程序向university表插入数据,学校信息已经在表里的。哪位抽出时间帮我看一下,程序哪里出了问题,谢谢了!后台运行结果,显示了两个insert语句Hibernate: 
    select
        max(user_id) 
    from
        t_user
Hibernate: 
    select
        max(uni_id) 
    from
        t_university
Hibernate: 
    insert 
    into
        t_university
        (uni_code, uni_name, uni_desc, province_code, uni_id) 
    values
        (?, ?, ?, ?, ?)
Hibernate: 
    insert 
    into
        t_user
        (user_name, user_realname, user_password, user_email, user_qq, user_tel, user_points, user_sex, user_disabled, user_createtime, user_updatetime, uni_code, user_id) 
    values
        (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)代码
user.hbm.xml<class name="User" table="t_user">
<!-- 映射标识属性 -->
<id name="userId" type="int" column="user_id">
<!-- 指定主键生成策略 -->
<generator class="increment"/>
</id>
<!-- 映射普通属性 -->
<property name="userName" column="user_name" type="string"
 length="20" />
<property name="userRealname" column="user_realname" type="string"
 length="20" />
<property name="userPassword" column="user_password" type="string"
 length="16" />
<property name="userEmail" column="user_email" type="string"
 length="50" />
<property name="userQQ" column="user_qq" type="string"
 length="12" />
<property name="userTel" column="user_tel" type="string"
 length="15" />
<property name="userPoints" column="user_points" type="int"
 />
<property name="userSex" column="user_sex" type="string"
 length="6" />
<property name="userDisabled" column="user_disabled" type="string"
 length="1" not-null="false"/>
 
<property name="userCreatetime">
<column name="user_createtime" sql-type="datetime" not-null="false"/>
</property>
<property name="userUpdatetime">
<column name="user_updatetime" sql-type="datetime" not-null="false"/>
        </property>
        
<many-to-one name="university" class="University" fetch="select" lazy="false" cascade="save-update,persist">
            <column name="uni_code" not-null="false" />
        </many-to-one>
        </set>
</class>
university.hbm.xml<class name="University" table="t_university">
<!-- 映射标识属性 -->
<id name="uniId" type="int" column="uni_id">
<!-- 指定主键生成策略 -->
<generator class="increment"/>
</id>
<!-- 映射普通属性 -->
<property name="uniCode" type="java.lang.Integer">
            <column name="uni_code" />
        </property>
<property name="uniName" column="uni_name" type="string"
 length="36" not-null="false"/>
<property name="uniDesc" column="uni_desc" type="string"
 length="50" />
 
<set name="users" table="t_user" inverse="false" lazy="true" fetch="select">
            <key>
                <column name="uni_code" not-null="false" />
            </key>
            <one-to-many class="User" />
        </set>
<many-to-one name="province" class="Province" fetch="select" cascade="none">
            <column name="province_code" />
        </many-to-one>
</class>MemberManagerImpl 的addMember方法public Integer addMember(User member, Integer uniCode) throws CampusException{
try
{
// 新增会员都为激活状态,disalbed属性设置为N
member.setUserDisabled("N");
// 新增会员的创建时间
Date date = new Date();
member.setUserCreatetime(date);
// 新增会员的更新时间,与创建时间相同
member.setUserUpdatetime(date);
// 新增会员的积分初始值为0分
member.setUserPoints(new Integer(0));

University uni = new University();
uni.setUniCode(uniCode);
member.setUniversity(uni);

// 保存
memberDao.save(member);

return member.getUserId();
}
catch (Exception e)
{
e.printStackTrace();
//log.debug(e.getMessage());
throw new CampusException();
}
}MemberDaoHibernate的save方法public void save(User member){ Session se=getSession();
Transaction tx=se.beginTransaction();
se.save(member);
tx.commit();
}

解决方案 »

  1.   

    public Integer addMember(User member, Integer uniCode) throws CampusException{
            try
            {
                // 新增会员都为激活状态,disalbed属性设置为N
                member.setUserDisabled("N");
                // 新增会员的创建时间            
                Date date = new Date();
                member.setUserCreatetime(date);
                // 新增会员的更新时间,与创建时间相同
                member.setUserUpdatetime(date);
                // 新增会员的积分初始值为0分
                member.setUserPoints(new Integer(0));
                
                University uni = new University();
                uni.setUniCode(uniCode);
                member.setUniversity(uni);
                
                // 保存
                memberDao.save(member);            
                
                return member.getUserId();
            }
            catch (Exception e)
            {
                e.printStackTrace();
                //log.debug(e.getMessage());
                throw new CampusException();
            }
        }
    这里University 不能new。new了就是session认为他就是一个非持久化对象,是非持久对象session就会保存。这里应该根据id查到一个University。
      

  2.   

    应该是持久化了吧?要不然怎么会有两个insert呢?
    然后不new那怎么才能取得university对象?
      

  3.   

    嗯,根据1楼的方法,用uniCode查了遍数据库,取得了university对象.
    (还能有别的方法取得持久化对象吗?又去查遍数据库,而且在userDao里去查university表,总觉得怪怪的)结果对t_university表执行的不是insert了,是update,不过能不能让他连update也禁止执行,执行这条语句对我来说没有用处,t_university表不需要任何操作。还有为什么对user表的insert操作,对应的university表的uni_id被当做user表的uni_code来insert了?
      

  4.   

    上面的问题,取得持久化对象,去掉级联,现在可以insert了,
    现在的问题就是对user表插入了学校的id,而不是想插入的学校的code
    楼下给我找找哪出了问题?
      

  5.   

    没解决,主键改为code了,id弃用了