论坛首页 入门技术论坛

奇怪的getHibernateTemplate().find()

浏览 3939 次
该帖已经被评为新手帖
作者 正文
   发表时间:2008-07-26  
public class SmUsersTbDAOimpl extends HibernateDaoSupport implements SmUserTbDAO{
	/*
	 * 读取用户权限值
	 */
	public List ReadUserValue(String id)
	{
		String HQL = "from SmUsersTb where userno ='"+id+"'"+" and  operprivno like '%ISPT%'";			
		return getHibernateTemplate().find(HQL); 
	}
}


    当我从外面调用的时候,如果库里有多条记录,每次返回的记录的条数会是正确的,但是内容都是重复.只会找出第一条记录,找了半天也不知道是哪出错了.其他的方法都行,就这个不行.哪位帮忙看看.

public class SmUsersTb {
	/*
	 *  用户权限表对应用户管理中心系统表sm_user_priv_tb
	 *  功能:查找用户权限
	 */
	private String userno;// 用户ID
	private String operprivno;// 用户权限	
	
	public SmUsersTb()
	{}
	
	public SmUsersTb(String userno,String operprivno)
	{
		this.userno =userno;
		this.operprivno = operprivno;
	}
	
	public String getOperprivno() {
		return operprivno;
	}
	public void setOperprivno(String operprivno) {
		this.operprivno = operprivno;
	}
	public String getUserno() {
		return userno;
	}
	public void setUserno(String userno) {
		this.userno = userno;
	}
}


<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
    <class name="com.sunyard.ispt.model.impl.SmUsersTb" table="sm_user_priv_tb" schema="dbo" catalog="SYSTEM_MANAGE_DB">
        <id name="userno" type="java.lang.String">
            <column name="user_no" length="20"/>
        </id>
        
        <property name="operprivno" type="java.lang.String">
            <column name="oper_priv_no" length="50" not-null="false"/>
        </property>        
    </class>
</hibernate-mapping>
   发表时间:2008-07-26  
wanwok 写道

String HQL = "from SmUsersTb where userno ='"+id+"'"+" and  like '%ISPT%'";           


既然userno做为ID并且等于某个值了,后面的like '%ISPT%'"有用吗?这个HQL查来查去只可能是1条或者0条记录,
如果查出多条记录,那么user_no列根本不是Primary Key。~~~~~~~~~~·
0 请登录后投票
   发表时间:2008-07-26  
  是的,这个表是没有主键的。通过上面的方法是想查到userno下的所有operprivno.这里对于同一个用户可能有很多的权限的。operprivno like '%ISPT%'" 这样我只是减少一点范围,因为表里的数据量比较大。
  刚刚在一个网页上看到一点内容,对hibernate不是很了解,是不是每个模版类都需要一个主键。通过Eclipse映射过来的时候形成了一个联合主键。但是我觉得很不好用,就去掉了。
0 请登录后投票
   发表时间:2008-07-27  
wanwok 写道
  是的,这个表是没有主键的。通过上面的方法是想查到userno下的所有operprivno.这里对于同一个用户可能有很多的权限的。operprivno like '%ISPT%'" 这样我只是减少一点范围,因为表里的数据量比较大。
  刚刚在一个网页上看到一点内容,对hibernate不是很了解,是不是每个模版类都需要一个主键。通过Eclipse映射过来的时候形成了一个联合主键。但是我觉得很不好用,就去掉了。


因为你没有在数据库对此表做主键约束。所以Eclipse映射过啦就是联合主键。

唯一的无意义的主键,主键就像是身份证一样标识一个数据库row,最好就是唯一的一个字段,不要联合主键。不能是有意义的字段,比如说身份证号码做主键,要是有一天输入错误一个身份证号码,而N个关联表的N个记录已经指向这个身份证号码的时候,你就知道修改起来什么是痛苦了。特别是在正在运行的数据库服务器上。

0 请登录后投票
   发表时间:2008-07-30  
大概明白是怎么回事了,我改用SQLQuery连上了,还是很感谢你的回复.
0 请登录后投票
   发表时间:2009-02-03  


.hbm配置文件主键配置问题
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics