PS:在ITeye上面问了两次都没能解决问题,不给力啊。很简单的一个测试;用Speak s = (Speak)session.get(Speak.class, 1);得到Speak对象之后,s.getAttachmentFlag()竟然取不到值,确切的说是取到的值为"";真要我小命!相关代码如下: 1、数据库中有speak表,speak表中有attachment_flag字段;2、attachment_flag字段的getter和setter方法hibernate自动生成的,应该没问题;3、数据库的配置<mapping resource="com/shaiyaya/dao/Speak.hbm.xml" /> 应该也没问题;4、测试语句:Session session = HibernateSessionFactory.getSession();     
Transaction tran = session.beginTransaction();     
     
Speak s = (Speak)session.get(Speak.class, 1);     
System.out.println("at:"+s.getAttachmentFlag());     
tran.commit();     
session.close();     
return "success";   
其它字段的值都能取到, 但就是取不到attachment_flag字段的值;前几天还是好的啊!好像是加了索引什么的就这样了,不知道是不是原因。不过删除了索引speak的所有索引也没解决问题…… 
speak.hbm.xml里面attachmentFlag字段的配置 <property name="attachmentFlag" type="java.lang.String">     
         <column name="attachment_flag" length="20"></column>     
</property>  
 其他字段都是能取出值来的,就是这个字段取不出值;并且我用session.update()方法的时候,不管传什么值,这个字段都是变成"";而其它字段都更新了的。speak表的DDL:-- Table "speak" DDL     
     
CREATE TABLE `speak` (     
  `speak_id` int(11) NOT NULL auto_increment,     
  `user_id` int(11) default NULL,     
  `content` mediumtext,     
  `create_time` timestamp NULL default NULL on update CURRENT_TIMESTAMP,     
  `last_comm_time` timestamp NULL default NULL COMMENT '后评论最时间',     
  `cate_flag` varchar(50) default NULL COMMENT 'twitter,style,topic',     
  `x_id` int(11) default NULL COMMENT '现表示的是forum的id',     
  `attachment_flag` varchar(20) default '0' ,     
  `comment_sum` int(11) default '0' COMMENT '应相的speak被评论的次数',     
  `love_sum` int(11) default '0' COMMENT '对应的speak被喜欢的次数',     
  `forward_sum` int(11) default '0' COMMENT '对应的speak被转发的次数',     
  PRIMARY KEY  (`speak_id`),     
  KEY `user_id` (`user_id`),     
  KEY `love_sum` (`love_sum`),     
  KEY `cate_flag` (`cate_flag`),     
  KEY `attachment_flag` (`attachment_flag`),     
  CONSTRAINT `speak_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE     
) ENGINE=InnoDB DEFAULT CHARSET=gbk;  
speak.javapackage com.shaiyaya.dao;     
     
import java.util.Date;     
/**   
 * Speak entity.   
 *    
 * @author MyEclipse Persistence Tools   
 */     
     
public class Speak implements java.io.Serializable {     
     
    // Fields     
     
    private Integer speakId;     
    private User user;     
    private String content;     
    private Date createTime;     
    private Date lastCommTime;     
    private String cateFlag;     
    private Integer XId;     
    private String attachmentFlag;     
    private Integer commentSum;     
    private Integer loveSum;     
    private Integer forwardSum;     
     
    // Constructors     
     
    /** default constructor */     
    public Speak() {     
    }     
     
    /** full constructor */     
    public Speak(User user, String content, Date createTime, Date lastCommTime,     
            String cateFlag, Integer XId, String attachmentFlag,     
            Integer commentSum, Integer loveSum, Integer forwardSum) {     
        this.user = user;     
        this.content = content;     
        this.createTime = createTime;     
        this.lastCommTime = lastCommTime;     
        this.cateFlag = cateFlag;     
        this.XId = XId;     
        this.attachmentFlag = attachmentFlag;     
        this.commentSum = commentSum;     
        this.loveSum = loveSum;     
        this.forwardSum = forwardSum;     
    }     
     
    // Property accessors     
     
    public Integer getSpeakId() {     
        return this.speakId;     
    }     
     
    public void setSpeakId(Integer speakId) {     
        this.speakId = speakId;     
    }     
     
    public User getUser() {     
        return this.user;     
    }     
     
    public void setUser(User user) {     
        this.user = user;     
    }     
     
    public String getContent() {     
        return this.content;     
    }     
     
    public void setContent(String content) {     
        this.content = content;     
    }     
     
    public Date getCreateTime() {     
        return this.createTime;     
    }     
     
    public void setCreateTime(Date createTime) {     
        this.createTime = createTime;     
    }     
     
    public Date getLastCommTime() {     
        return this.lastCommTime;     
    }     
     
    public void setLastCommTime(Date lastCommTime) {     
        this.lastCommTime = lastCommTime;     
    }     
     
    public String getCateFlag() {     
        return this.cateFlag;     
    }     
     
    public void setCateFlag(String cateFlag) {     
        this.cateFlag = cateFlag;     
    }     
     
    public Integer getXId() {     
        return this.XId;     
    }     
     
    public void setXId(Integer XId) {     
        this.XId = XId;     
    }     
     
    public String getAttachmentFlag() {     
        return this.attachmentFlag;     
    }     
     
    public void setAttachmentFlag(String attachmentFlag) {     
        this.attachmentFlag = attachmentFlag;     
    }     
     
    public Integer getCommentSum() {     
        return this.commentSum;     
    }     
     
    public void setCommentSum(Integer commentSum) {     
        this.commentSum = commentSum;     
    }     
     
    public Integer getLoveSum() {     
        return this.loveSum;     
    }     
     
    public void setLoveSum(Integer loveSum) {     
        this.loveSum = loveSum;     
    }     
     
    public Integer getForwardSum() {     
        return this.forwardSum;     
    }     
     
    public void setForwardSum(Integer forwardSum) {     
        this.forwardSum = forwardSum;     
    }    

解决方案 »

  1.   

    哥! 不是用session.get();获取对象的吧!!? 试试createQuery();java高手群 群号:224651178,欢迎各位加入
      

  2.   

    确定数据库中这个字段有值?看你写了这么多,好像都没说数据库中到底有没有值。到底是java程序得不到呢,还是数据库中的值不能存入
      

  3.   


    获得了speak对象之后,不能取到数据库里面的attachment_flag这个字段的值(应该取到的值为""),而这个字段在数据库里面是有值的。
      

  4.   


    效果是一样的,没取到值。
    ps:get和load方法都可以拿到对象的;createQuery当然也行。