0

我正在使用 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,然后检查它是否存在并更新或保存它。我的架构是错误的还是在休眠中有一种方法可以做到这一点?

注意:我很清楚 saveOrUpdate 的工作原理Hibernate 文档

-提前致谢。内德

4

0 回答 0