例如有一个sort表的外键username 对应于user表的主键username,生成持久化类后,字段username在Sort类的属性变成了一个User类型对象,请问这时应该如何持久化使表中的username字段插入内容,我试了用sort.setUser(user)没有用,咋办?

解决方案 »

  1.   

    在定义映射的时候,将Sort类的username属性定义为一个many-to-one就行了。
    XML格式是这样的
    <many-to-one name="username" column="username" class="User" ></many-to-one>
    注解格式可以写成这样的
     @ManyToOne(cascade = CascadeType.REFRESH, fetch = FetchType.LAZY)
     @JoinColumn(name = "username")
     private User username;
      

  2.   

    sort.setUser(user);
    这个赋值只是程序中的赋值,那么还有一件事就是要告诉hibernate的实体配置文件,你要级联更新:<many-to-one name="username" column="username" class="User" cascade="all"></many-to-one>cascade也可以是cascade="save-update",只级联更新。
      

  3.   

    映射文件就是那样写了,也设置了级联cascade="all",但是操作后sort.setUser(user)表中的字段username并没有变化。我想问的是如何做来设置这个sort表的外键字段username?
      

  4.   

    many-to-one这个标签就是用来设置外键的。如果没有效果,还得看看你的这个标签是不是写对了。
      

  5.   

    这个是我在数据库里设置外键后,自动生成的映射文件和POJO类,sort表的映射文件里是<many-to-one>,user表的映射文件里是<one-to-many>,自动生成的不会错吧。
      

  6.   

             Sort.hbm.xml中的定义是
                <many-to-one name="user" class="Pojo.User"  cascade="all">
                <column name="username" length="20" />
                </many-to-one>    User.hbm.xml中的定义是
             <set name="sorts" inverse="true">
                <key>
                    <column name="username" length="20" />
                </key>
                <one-to-many class="Pojo.Sort" />
            </set>
    就是这样写的
      

  7.   

    在定义映射的时候,将Sort类的username属性定义为一个many-to-one就行了。
    XML格式是这样的
    <many-to-one name="username" column="username" class="User" ></many-to-one>
    注解格式可以写成这样的
     @ManyToOne(cascade = CascadeType.REFRESH, fetch = FetchType.LAZY)
     @JoinColumn(name = "username")
     private User username;
      

  8.   

    你不会没调用session.save(sort)方法吧
    还有,记得save前session.beginTransaction(),save后commit
      

  9.   

    Hibernate映射关系配置错误,用many-to-one。
      

  10.   

    找到错误了,获得持久化对象user,必须和sort.setUser(user)写在同一个事务中才行,也就是说user必须是持久化对象。谢谢大家~