hibernate查询语句:
select distinct ai.documentId from ApproveInfo ai where ai.approver.id = ?
user(用户表) 表结构
     userId      username     password
       1            aaa          aaa
       2            bbb          bbb
       3            ccc          ccc   document(公文表) 表结构    documentId(公文标识)   title(标题)  creatorId(创建者ID)     content(公文内容,text大文本二进制类型) 
          1                   中国               1                      二进制文件approveInfo(审批信息表) 表结构
    appId(审批标识)     comment(审批内容)     documentId(对应的公文ID)     approverId(审批者ID)
          1                 同意                          1                          1
          2                 不同意                        1                          2
          3                 还行                          1                          1
          4                 待审                          1                          2    执行
          select distinct ai.documentId from ApproveInfo ai where ai.approver.id = 1
得到的查询结果为:
                      documentId
                            1
                           
这是我查询根据公文创建者(approver)ID
在审批信息表(approveInfo)中查询没有重复的
公文标识(documentId)外键,document中包含text字段
在mysql上面没有错误
在sqlserver上报错java.sql.SQLException: 不能以 DISTINCT 方式选择 text、ntext 或 image 数据类型 
/**
 * 公文实体类
 * @author Administrator
 * @hibernate.class table="SD_workDoc"
 */
public class Document {


/**
 * @hibernate.id 
 *  generator-class="native"
 */
private long documentId;

/**
 * 标题
 * @hibernate.property
 */
private String title;



/**
 * 创建者
 * @hibernate.many-to-one
 *  column="creatorId"
 */
private User creator;



/**
 * 公文内容,即上传文件的内容,
 * 这些上传文件的内容将会被保存到数据库
 * @hibernate.property
 *  type="binary"
 *  length="99999999"
 */
private byte[] content;}
/**
 * 审批历史信息
 * @author Administrator
 * @hibernate.class table="SD_workAppinfo"
 */
public class ApproveInfo {

/**
 * @hibernate.id
 *  generator-class="native"
 */
private long appId;

/**
 * 审批意见
 * @hibernate.property
 */
private String comment;


/**
 * 被审批的公文
 * @hibernate.many-to-one
 *  column="documentId"
 */
private Document document;

/**
 * 审批者
 * @hibernate.many-to-one
 *  column="approverId"
 */
private User approver;
}
如果不用distinct  SQL语句怎么写?能达到这样的效果。各位大虾有没有好的解决方法。
sql语句应该这么写啊

解决方案 »

  1.   

    select distinct ai.document from ApproveInfo ai where ai.approver.id = ?
    HQL应该看ApproveInfo实体类中的属性,而不是数据库表中的字段。
      

  2.   

    hibernate查询语句: 
    select distinct ai.documentId from ApproveInfo ai where ai.approver.id = ? hql查询用的对象名 不是数据库的字段名
      

  3.   

    既然在mysql上可以,那说明hql没错误
    换成sqlserver后有无换hibernate的方言?
    如果还是错误,可能就是sqlserver的二进制数据不支持distinct啦