blogjava's web log

blogjava's web log
...

hibernate uuid.hex主键生成+spring带来的困惑

第二次插入就报错?


表结构

CREATE TABLE `cloumn` (
  `c_id` 
varchar(16)  NOT NULL,
  `u_id` 
varchar(16)  default NULL,
  `c_name` 
varchar(100default NULL,
  `c_sort` 
int(11default NULL,
  `c_beizhu` 
varchar(100) ,
  
PRIMARY KEY  (`c_id`)
 
)

2.配置文件
<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
                            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                            "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" 
>

<hibernate-mapping>
<class
    
name="hibernate3test.dal.Cloumn"
    table
="cloumn"
>
    
<id name="cid" type="java.lang.String" column="c_id" >
//uuid.hex生成方式
        
<generator class="uuid.hex" />
    
</id>
    
<property name="u_id" type="java.lang.String" column="u_id" />
    
<property name="cname" type="java.lang.String" column="c_name" />
     
<property name="csort" type="java.lang.Integer" column="c_sort" />
      
<property name="cbeizhu" type="java.lang.String" column="c_beizhu" />

</class>
</hibernate-mapping>

spring配置文件
    <bean id="test" class="hibernate3test.dal.dal">
      
            
<property name="sessionFactory"><ref local="sessionFactory"/></property>   
    
</bean>


vo
public class Cloumn implements Serializable {

    
private String cid;
    
private String u_id;
    
private String cname;
    
private Integer csort;
    
private String cbeizhu;
    
public Cloumn() {
    }

//geter setter


dao 代码
package hibernate3test.dal;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class dal extends HibernateDaoSupport {
    
public dal() {
    }

    
public void addCloumn()
    
{
        Cloumn cc 
= new Cloumn();
        cc.setU_id(
"297ebd930b46197a");
        cc.setCname(
"测试添加拦目1");
        cc.setCbeizhu(
"备注");
        cc.setCsort(
1);
        
this.getHibernateTemplate().save(cc);
    }


测试
    public static void main(String args[])
    
{
   
//加载spring配置文件
               Resource rs=new ClassPathResource("appcontext.xml");
        BeanFactory factory
=new XmlBeanFactory(rs);
//得到dal
        dal dao=(dal)factory.getBean("test");
//添加
       dao.addCloumn();
       
//第二次再次添加就报错..??
       
//dao.addCloumn();
    }



怎么会这样,第一次可以添加进数据库,第二次再调用dao.addCloumn()就报错?

这样做应该是没有问题的啊??

posted on 2006-05-31 01:04 record java and net 阅读(8837) 评论(14)  编辑  收藏 所属分类: javaSpring

评论

# re: hibernate uuid.hex主键生成+spring带来的困惑 2006-05-31 08:16 sun

主键不允许有重复值  回复  更多评论   

# re: hibernate uuid.hex主键生成+spring带来的困惑 2006-05-31 08:19 吴某人-不断地学习

是啊。

但是uuid.hex不是由hibernate自动生成的吗?

怎么会报重复呢?



  回复  更多评论   

# re: hibernate uuid.hex主键生成+spring带来的困惑 2006-05-31 09:58 莫多

我都用UUID,可是没有你说的这个问题。
不会有问题的,还有就是你用Hiberate3那么就用uuid
你看源代码就知道uuid.hex其实和uuid是一样的了。只有在hibernate2里面才有区别。  回复  更多评论   

# re: hibernate uuid.hex主键生成+spring带来的困惑 2006-05-31 10:28 吴某人-不断地学习

@莫多

我单独用hibernate测试没有问题,加上spring 问题就来了。。

以下是hibernate测试代码(通过)
//得到session
public Session getSession()
{
try
{
Configuration cfg = new Configuration().configure();
SessionFactory sf=cfg.buildSessionFactory();
return sf.openSession();
}
catch(Exception ee)
{
log.error("error:"+ee.getMessage());
}
return null;
}

//添加的方法
public void addCloumn()
{
Cloumn cc = new Cloumn();
cc.setU_id("297ebd930b46197a");
cc.setCname("测试添家拦目1");
cc.setCbeizhu("备注");
cc.setCsort(1);
Session ss=this.getSession();
ss.save(cc);
ss.flush();
ss.close();
}

public static void main(String[] args) {
dao test = new dao();
//添加
test.addCloumn();
再次添加
test.addCloumn();

}

这样没有问题。。

加了spring就有问题。

路过的高手指点。。。
  回复  更多评论   

# re: hibernate uuid.hex主键生成+spring带来的困惑 2006-06-06 16:49 冰树

烦死了
我也一样的有这个问题  回复  更多评论   

# re: hibernate uuid.hex主键生成+spring带来的困惑 2006-06-06 17:27 吴某人-不断地学习

你问题解决了吗?

  回复  更多评论   

# re: hibernate uuid.hex主键生成+spring带来的困惑 2006-07-17 20:42 路过

我也碰到类似的问题。。。。现在解决了
1。确认id字段在数据库是vchar(32)
2.表按id字段做索引  回复  更多评论   

# re: hibernate uuid.hex主键生成+spring带来的困惑 2006-07-18 08:27 吴某人-不断地学习

@路过
谢谢阿。

有空我研究1下。

最近搞.net 了  回复  更多评论   

# re: hibernate uuid.hex主键生成+spring带来的困惑 2007-04-27 11:26 aaa

unsaved-value=""  回复  更多评论   

# re: hibernate uuid.hex主键生成+spring带来的困惑 2008-04-23 16:23 freeit

数据库字段不够长  回复  更多评论   

# re: hibernate uuid.hex主键生成+spring带来的困惑 2008-04-28 10:25 F

UUID.HEX对应的数据库字段长度32  回复  更多评论   

# re: hibernate uuid.hex主键生成+spring带来的困惑 2008-05-22 16:43 Andy Wu

Cloumn cc = new Cloumn();
cc.setU_id("297ebd930b46197a");
cc.setCname("测试添加拦目1");
cc.setCbeizhu("备注");
cc.setCsort(1);

UUID会自动生成,不需要你设置
cc.setU_id("297ebd930b46197a");
这句不要  回复  更多评论   

# re: hibernate uuid.hex主键生成+spring带来的困惑 2008-05-22 16:45 Andy Wu

@Andy Wu
看错了  回复  更多评论   

# re: hibernate uuid.hex主键生成+spring带来的困惑 2008-07-08 15:55 scorpioqh

我感觉应该是Spring的HibernateTemplate方法的问题,也就是这句调用:
this.getHibernateTemplate().save(cc);
你看看Spring源代码,这个save方法在Spring内部是怎么实现的。是调用Hibernate的save方法吗?如果调用的是saveOrUpdate方法,那就会出错。。他会插入相同的主键,会认为你这个新插入的对象是游离对象。  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 

导航

常用链接

留言簿(44)

新闻档案

2.动态语言

3.工具箱

9.文档教程

友情链接

搜索

最新评论