使用用户定义的IdentifierGenerator UUID进行Hibernate

时间:2013-04-05 22:44:16

标签: java database hibernate uuid

我正在使用Hibernate 3.6的环境。我正在尝试实现一个使用java.util中的UUID作为PK的MySQL表,这些UUID是从EntityImage定义的多个字符串生成的。这是我用来生成这些密钥的代码。

public class EntityIDGenerator implements IdentifierGenerator {
    ...    
    private UUID generateUUID(String str) {
            return UUID.nameUUIDFromBytes(str.getBytes());
    }
    public UUID generateUUID(EntityImage image) {
        return generateUUID(image.getEntityId()+image.getEntityType().toUpperCase()+image.getFilename().toUpperCase());
    }
    ...
    public Serializable generate(SessionImplementor session, Object object)
        throws HibernateException {
              if(object instanceof EntityImage) {
                   return generateUUID((EntityImage)object);
              }
              return null;
    }
}

这里是我的休眠

<class name="EntityImage" table="entity_image">
    <id name="id" column="id" type="entityUUID" unsaved-value="null">
        <generator class="com.covelo.energy.score.db.EntityIDGenerator" />
    </id>
    <property name="entityId" type="int"/>
    <property name="entityType" type="string" length="45" />
    <property name="filename" type="string" length="90" />
    <property name="fileType" type="string" length="5"/>
    <property name="imageData" type="binary" column="image_data"/>
  </class>

使用我当前的设置,我只能以一种方式工作,自己生成UUID并检查Hibernate中是否存在密钥然后相应地调用保存或更新(或者只是将UUID分别设置为null或值)

这种方式似乎是错误的,特别是对于实现这个PK生成器。理想情况下,Hibernate会使用我的IdentifierGenerator生成PK,然后检查它是否存在并更新或保存它。我是否认为我的架构错了,或者有什么方法可以在hibernate中执行此操作?

注意:我很清楚saveOrUpdate如何运作Hibernate documentation

- 提前谢谢。 奈德

0 个答案:

没有答案