请教高手:(本人SSH2初学者,如果问题比较傻,请大家多包涵)
Comment表有两个外键分别是User表和Goods表的id
CREATE TABLE `comment` (
  `Cid` int(11) NOT NULL AUTO_INCREMENT,
  `Gid` int(11) DEFAULT NULL,
  `Uid` int(11) DEFAULT NULL,
  `Rating` int(11) DEFAULT NULL,
  `Detailcmt` text,
  PRIMARY KEY (`Cid`),
  KEY `FK_Relationship_8` (`Uid`),
  KEY `FK_Relationship_9` (`Gid`),
  CONSTRAINT `FK_Relationship_8` FOREIGN KEY (`Uid`) REFERENCES `user` (`Uid`),
  CONSTRAINT `FK_Relationship_9` FOREIGN KEY (`Gid`) REFERENCES `goods` (`Gid`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8
-------------------------------------------------------------------------------------
comment和User是双向一对多(多对一)关系,comment和Goods也是。
comment类、user类、Goods类的部分代码如下
public class Comment implements java.io.Serializable { /**
 * 
 */
private static final long serialVersionUID = -8938253805027393144L;
// Fields
private Integer cid;
private Goods goods;
private User user;
private Integer rating;
private String detailcmt;
...}
public class User implements java.io.Serializable { /**
 * 
 */
private static final long serialVersionUID = 6215220620441185142L;
// Fields private Integer uid;
private String uname;
private String password;
private Boolean ustate;
private String email;
private Integer score;
private Set<Comment> comments = new HashSet<Comment>(0);
private Set<Address> addresses = new HashSet<Address>(0);
private Set<Order> orders = new HashSet<Order>(0);
...}public class Goods implements java.io.Serializable { /**
 * 
 */
private static final long serialVersionUID = 1513877686565642261L;
// Fields private Integer gid;
private String gname;
private Float price;
private Integer discount;
private String image;
private String detailinfo;
private Integer inventory;
private Boolean gstate;
private Set<Singleorder> singleorders = new HashSet<Singleorder>(0);
private Set<Comment> comments = new HashSet<Comment>(0);
...}
-----------------------------------------------------------------------------
映射文件部分代码如下
Comment.hbm.xml
 <many-to-one name="goods" class="edu.ws.bean.Goods" fetch="select" cascade="save-update">
            <column name="Gid" />
        </many-to-one>
        <many-to-one name="user" class="edu.ws.bean.User" fetch="select" cascade="save-update">
            <column name="Uid" />
        </many-to-one>
User.hbm.xml
<set name="comments" inverse="true" cascade="all">
            <key>
                <column name="Uid" />
            </key>
            <one-to-many class="edu.ws.bean.Comment" />
        </set>
        <set name="addresses" inverse="true" cascade="all">
            <key>
                <column name="Uid" />
            </key>
            <one-to-many class="edu.ws.bean.Address" />
        </set>
        <set name="orders" inverse="true" cascade="all">
            <key>
                <column name="Uid" />
            </key>
            <one-to-many class="edu.ws.bean.Order" />
        </set>
Goods.bm.xml
<set name="singleorders" inverse="true" cascade="all">
            <key>
                <column name="Gid" />
            </key>
            <one-to-many class="edu.ws.bean.Singleorder" />
        </set>
        <set name="comments" inverse="true" cascade="all">
            <key>
                <column name="Gid" />
            </key>
            <one-to-many class="edu.ws.bean.Comment" />
        </set>
---------------------------------------------------------------------------------------
CommentDaoImpl.java
package edu.ws.dao.impl;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import edu.ws.bean.Comment;
import edu.ws.dao.CommentDao;public class CommentDaoImpl extends HibernateDaoSupport implements CommentDao { public void saveComment(Comment comment) {
this.getHibernateTemplate().save(comment);
}}
------------------------------------------------------------------------------------
我写的action是从User表和Goods表中各取行生成相应的类对象,然后用saveComment方法存进数据库,出了Uid列和Gid列别的都存进去了,只有这两个外键对应的id存不进去。请问到底是哪儿出了问题!纠结中...期待中...请大家帮帮忙O(∩_∩)O~

解决方案 »

  1.   

    那你看看两个外键对应的id到底存不存在先,如果说两个外键对应的id都不存在肯定会出错啊,那你得先设置好这两个Id再存
      

  2.   

    在数据库中不是已经设了外键了吗?而且在hbm.xml中在many to one中也写了对应column,还需要设别的吗?请说的详细些,谢谢O(∩_∩)O~。
      

  3.   

    为什么没人回答呢???杯具?%>_<%  纠结了两天了,~~~~(>_<)~~~~ 我在存comment的时候控制台显示是这样的
    Hibernate: insert into webshopdb.comment (Gid, Uid, Rating, Detailcmt) values (?, ?, ?, ?)
    没有update Gid和Uid的语句  Goods和User对象都是从数据库里取的。
      

  4.   

    终于找到答案了,原来是自己比较白痴,在Action中没有取到user和goods的值 一直是空的所以当然是存null了。现在搞定了。呵呵。问题解决,结贴结贴。