最近用Struts开发,请问怎样在Action中生成唯一标识符呢?
我的数据库对应字段是uniqueidentifier,因此需要生成唯一标识符,请问怎么生成这种GUID呢?

解决方案 »

  1.   

    用HIBERNATE来生成数据库的唯一标识符:Generator 为每个 POJO 的实例提供唯一标识。一般情况,我们使用“native”。class 表示采用由生成器接口net.sf.hibernate.id.IdentifierGenerator 实现的某个实例,其中包括: “assigned” 
    主键由外部程序负责生成,在 save() 之前指定一个。//需要手动填主键(hibernate不会自动生成主键) “hilo” 
    通过hi/lo 算法实现的主键生成机制,需要额外的数据库表或字段提供高位值来源。 “seqhilo” 
    与hilo 类似,通过hi/lo 算法实现的主键生成机制,需要数据库中的 Sequence,适用于支持 Sequence 的数据库,如Oracle。
     
    “increment” 
    主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。这种方式可能产生的问题是:不能在集群下使用(即,只使用于单机)。 “identity” 
    采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL 中的主键生成机制。
     
    “sequence” 
    采用数据库提供的 sequence 机制生成主键。如 Oralce 中的Sequence。
     
    “native” 
    由 Hibernate 根据使用的数据库自行判断采用 identity、hilo、sequence 其中一种作为主键生成方式(都判断一遍效率低)。 “uuid.hex” 
    由 Hibernate 基于128 位 UUID 算法 生成16 进制数值(编码后以长度32 的字符串表示)作为主键(生成数字、字母混排的主键,所以OK)。 “uuid.string” 
    与uuid.hex 类似,只是生成的主键未进行编码(长度16),不能应用在 PostgreSQL 数据库中。 “foreign” 
    使用另外一个相关联的对象的标识符作为主键(用于主外键关联时用)。 
    <?xml version="1.0" encoding="GB2312"?>
    <!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
    <hibernate-mapping>
    <class name="model.Certificate" table="certificate" lazy="true">
    <id name="id">
    <generator class="foreign">
    <param name="property">stu</param>
    </generator>
    </id>
    <property name="describe" column="`describe`" type="string" />
    <one-to-one name="stu" class="model.Student" fetch="select" constrained="true" cascade="none"/>
    </class>
    </hibernate-mapping>
      

  2.   

    import java.util.UUID;public class TestGuid
    {
        public static void main(String[] args)
        {
            UUID uuid = UUID.randomUUID();
            String a = uuid.toString();        System.out.println(uuid.toString());        System.out.println(a.length());    }
    }
      

  3.   

    UUID和GUID是一样的吗?
    格式一样而生成方式不一样吗?
    可不可以简单介绍一下?谢谢
      

  4.   

    同意楼上做法:用JDK1.5新增的 java.util.UUID;  生成UUID